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

Αυτό δεν φαίνεται να δουλεύει, λαμβάνω συντακτικό σφάλμα, ποιος είναι ο σωστός τρόπος για να γίνει αυτό για την καταγραφή όλων των ειδών των εξαιρέσεων σε ένα αρχείο

Λύση

Πρέπει να ορίσετε τον τύπο της εξαίρεσης που θέλετε να πιάσετε. Έτσι γράψτε except Exception, e: αντί για except, e: για μια γενική εξαίρεση (που θα καταγραφεί ούτως ή άλλως).

Άλλη δυνατότητα είναι να γράψετε ολόκληρο τον κώδικα try/except με αυτόν τον τρόπο:

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

στην Python 3.x και στις σύγχρονες εκδόσεις της Python 2.x χρησιμοποιήστε except Exception as e αντί για 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:
    logger.error('Failed to upload to ftp: '+ str(e))
Σχόλια (6)

Η σύνταξη δεν υποστηρίζεται πλέον στην python 3. Χρησιμοποιήστε την ακόλουθη.

try:
    do_something()
except BaseException as e:
    logger.error('Failed to do something: ' + str(e))
Σχόλια (8)

Μπορείτε να δοκιμάσετε να καθορίσετε ρητά τον τύπο BaseException. Ωστόσο, αυτό θα πιάσει μόνο παράγωγα της BaseException. Ενώ αυτό περιλαμβάνει όλες τις εξαιρέσεις που παρέχονται από την υλοποίηση, είναι επίσης πιθανό να εγείρουν αυθαίρετες κλάσεις παλαιού τύπου.

try:
  do_something()
except BaseException, e:
  logger.error('Failed to do something: ' + str(e))
Σχόλια (0)