sys.exc_info () [1] тип и формат в Python 2.71 - PullRequest
0 голосов
/ 21 апреля 2011

В python 2.71 в Windows XP мне нужно использовать FTP.Мой код:

try:
    ftp = FTP(trec.address)
    ftp.login(trec.login, trec.passw)
    s = ftp.retrlines('LIST ' + trec.filetype)
    ftp.quit()
except:
    (type, value, tb) = sys.exc_info()
    reponse = "%s" % value

Но у меня есть ошибка в последней строке: UnicodeDecodeError: кодек «ascii» не может декодировать байт 0xea в позиции 38: порядковый номер не в диапазоне (128)
Как я на французском Windows env.sys.exc_info () [1] - это: [Errno 10061] Aucune Connections n'a pu être établie car l'ordinateur Cible l'a expressioné refusée
Какой самый эффективный способ форматированияsys.exc_info () [1]?

Ответы [ 2 ]

4 голосов
/ 21 апреля 2011

value является экземпляром класса Error. Вы хотите отформатировать его как строку. Это невозможно. Кажется, вы хотите получить сообщение, связанное с ошибкой. Это сообщение можно найти в value.message. Попробуйте это:

try:
    ftp = FTP(trec.address)
    ftp.login(trec.login, trec.passw)
    s = ftp.retrlines('LIST ' + trec.filetype)
    ftp.quit()
except:
    type, value, tb = sys.exc_info()
    reponse = "%s" % value.message
0 голосов
/ 09 мая 2011

ОК, лучший способ, который я нашел, это использовать трассировку следующим образом:

import traceback

def trace_except(sysexecinfo, smessage = ''):
   """ Trace exceptions """
   exc_type, exc_value, exc_traceback = sysexecinfo
   i, j = (traceback.extract_tb(exc_traceback, 1))[0][0:2]
   k = (traceback.format_exception_only(exc_type, exc_value))[0]
   trace('E:'+ 'Err : ' + smessage + k + i + ', ligne ' + str(j))
   return k

 try:
   ftp = FTP(trec.address)
   ftp.login(trec.login, trec.passw)
   s = ftp.retrlines('LIST ' + trec.filetype)
   ftp.quit() 
 except:
    reponse = trace_except(sys.exc_info())
...