736 votes

capture de message d'exception python

import ftplib
import urllib2
import os
import logging
logger = logging.getLogger('ftpuploader')
hdlr = logging.FileHandler('ftplog.log')
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.INFO)
FTPADDR = "some ftp address"

def upload_to_ftp(con, filepath):
    try:
        f = open(filepath,'rb')                # file to send
        con.storbinary('STOR '+ filepath, f)         # Send the file
        f.close()                                # Close file and FTP
        logger.info('File successfully uploaded to '+ FTPADDR)
    except, e:
        logger.error('Failed to upload to ftp: '+ str(e))

Cela ne semble pas fonctionner, j'obtiens une erreur de syntaxe, quelle est la bonne façon de procéder pour enregistrer toutes sortes d'exceptions dans un fichier

987voto

eumiro Points 56644

Vous devez définir le type d'exception que vous souhaitez intercepter. Écrivez donc except Exception, e: au lieu de except, e: pour une exception générale (qui sera de toute façon enregistrée).

Une autre possibilité est d'écrire tout votre code try/except de cette façon :

 try:
    with open(filepath,'rb') as f:
        con.storbinary('STOR '+ filepath, f)
    logger.info('File successfully uploaded to '+ FTPADDR)
except Exception, e: # work on python 2.x
    logger.error('Failed to upload to ftp: '+ str(e))

dans Python 3.x et les versions modernes de Python 2.x, utilisez except Exception as e au lieu de except Exception, e :

 try:
    with open(filepath,'rb') as f:
        con.storbinary('STOR '+ filepath, f)
    logger.info('File successfully uploaded to '+ FTPADDR)
except Exception as e: # work on python 3.x
    logger.error('Failed to upload to ftp: '+ str(e))

336voto

sjtaheri Points 572

La syntaxe n'est plus prise en charge dans python 3. Utilisez plutôt ce qui suit.

 try:
    do_something()
except BaseException as e:
    logger.error('Failed to do something: ' + str(e))

56voto

Kamika Points 328

Il existe certains cas où vous pouvez utiliser le e.message ou les e.messages .. Mais cela ne fonctionne pas dans tous les cas. Quoi qu'il en soit, le plus sûr est d'utiliser le str(e)

 try:
  ...
except Exception as e:
  print(e.message)

52voto

berniey Points 180

Mise à jour vers quelque chose de plus simple pour logger (fonctionne à la fois pour python 2 et 3). Vous n'avez pas besoin de module de traçabilité.

 import logging

logger = logging.Logger('catch_all')

def catchEverythingInLog():
    try:
        ... do something ...
    except Exception as e:
        logger.error(e, exc_info=True)
        ... exception handling ...

C'est maintenant l'ancienne méthode (bien que cela fonctionne toujours):

 import sys, traceback

def catchEverything():
    try:
        ... some operation(s) ...
    except:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        ... exception handling ...

valeur_ex est le message d'erreur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X