Python 2.71中的sys.exc_info()[1]类型和格式

时间:2011-04-20 20:13:53

标签: python unicode string-formatting

在Windows XP上的python 2.71中,我需要使用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'编解码器无法解码位置38的字节0xea:序号不在范围内(128)
因为我在法语Windows环境中。 sys.exc_info()[1]是: [Errno 10061] Aucune connexion n'apuêtreétabliecartl'ordinateur cible l'acareémentrefusée
格式化sys.exc_info()[1]的最有效方法是什么?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

好的,我找到的最好的方法是使用这样的追溯:

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())