1. ホーム
  2. python

[解決済み] pythonの例外メッセージのキャプチャ

2022-03-14 02:37:24

質問

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: # work on python 2.x
    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: # work on python 3.x
    logger.error('Failed to upload to ftp: '+ str(e))