zachytávanie správ o výnimkách v jazyku 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))

Zdá sa, že to nefunguje, dostanem syntaktickú chybu, aký je správny spôsob, ako to urobiť pre zaznamenávanie všetkých druhov výnimiek do súboru

Riešenie

Musíte definovať typ výnimky, ktorú chcete zachytiť. Takže namiesto except, e: napíšte except, e: pre všeobecnú výnimku (ktorá bude aj tak zaznamenaná).

Ďalšou možnosťou je napísať celý kód try/except týmto spôsobom:

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

v Pythone 3.x a moderných verziách Pythonu 2.x používajte except Exception as e namiesto 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))
Komentáre (6)

Táto syntax už nie je v jazyku python 3 podporovaná. Namiesto nej použite nasledujúcu.

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

Môžete skúsiť explicitne určiť typ BaseException. Tým však zachytíte len deriváty BaseException. To síce zahŕňa všetky implementačne zabezpečené výnimky, ale je možné vyvolať aj ľubovoľné výnimky starého typu.

try:
  do_something()
except BaseException, e:
  logger.error('Failed to do something: ' + str(e))
Komentáre (0)