2011-04-20 1 views
0

En python 2.71 sous Windows XP, j'ai besoin d'utiliser FTP. Mon code est:sys.exc_info() [1] type et format en Python 2.71

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 

Mais j'ai une erreur sur la dernière ligne: UnicodeDecodeError: codec 'ascii' ne peut pas décoder octet 0xea en position 38: ordinal dans la plage (128)
Comme je suis en français Windows env. le sys.exc_info() [1] est: [Errno 10061] Aucune connexion n'a été établie sur l'ordinateur cible l'a refusé
Quel est le moyen le plus efficace de formater sys.exc_info() [1] ?

Répondre

0

OK, la meilleure façon que j'ai trouvé est d'utiliser retraçage comme ceci:

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

value est une instance de la classe Error. Vous voulez le formater en tant que chaîne. C'est impossible. Il semble que vous voulez obtenir le message associé à l'erreur. Ce message peut être trouvé dans value.message. Essayez ceci:

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

type 'valeur' ​​est 'Erreur'. Donc, quand j'essaye de l'encoder, j'ai l'erreur: "AttributeError: l'objet 'error' n'a pas d'attribut 'decode'" – philnext

+0

@philnext: Woops, la réponse éditée :) – orlp

+0

... mais quand j'essaye, même si value == '[Errno 10061] Aucune connexion n'a été établie à l'ordinateur cible l'a refusé', value.message == '' ... étrange non? – philnext

Questions connexes