在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]的最有效方法是什么?
答案 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())