Bonjour,
Je code actuellement un système de communication via le port série en python. Je me suis fais ma propre classe de com', et maintenant je m'atèle à loguer toutes les erreurs en base de donnée.
Prenons l'exemple de ma fonction de connexion :
1 2 3 4 5 6 7 8 | def _Connect(self): try: #Try to connect, ... boResult = True except serial.serialutil.SerialException, err: self._AddStatus(self.STATUS_ERROR, self.ERROR_UNABLE_CONNECT, err.message) boResult = False return (boResult) |
Si un problème survient lors de la connexion (dans la plupart des cas j'ai oublié de brancher le module), alors l'exception est levée. La fonction addStatus
va se charger d'envoyer en base de donnée dans une table de log, le fait qu'un status de type erreur est survenue, que cette erreur est une erreur de type impossible de se connecter, et la raison. Le problème vient de cette dernière : la raison.
Lorsque j'affiche la raison, je vois ça :
1 2 3 4 | except serial.serialutil.SerialException, err: print err.message # affiche -> could not open port '/dev/ttyS4': WindowsError(3, 'Le chemin d\x92acc\xe8s sp\xe9cifi\xe9 est introuvable.') self._AddStatus(self.STATUS_ERROR, self.ERROR_UNABLE_CONNECT, err.message) boResult = False |
Ma page est encodée en utf-8, le coding est défini sur cet encodage aussi. Lorsque je fais un
print [err.message]
, j'obtiens ça : ["could not open port '/dev/ttyS4': WindowsError(3, 'Le chemin d\\x92acc\\xe8s sp\\xe9cifi\\xe9 est introuvable.')"]
Les \
sont inhibés, de fait les accents ne s'affichent pas… Mais pourquoi ?
J'ai tenté milles techniques différentes, passant du .decode()
et .encode()
à unicode()
, avec les codings les plus utilisés, jusqu'à str([e.message]).replace('\\\\', '\\')
(mais non, c'est pas crade :siffle: ), mais rien n'y fait.
Quelqu'un a une idée ?