947 Stimmen

python ausnahme meldung aufzeichnen

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

Dies scheint nicht zu funktionieren, ich erhalte Syntaxfehler, was ist der richtige Weg, dies zu tun für die Protokollierung aller Arten von Ausnahmen in eine Datei

3 Stimmen

Ihr Einzug ist fehlerhaft. Und lassen Sie das , après except .

4 Stimmen

@SvenMarnach, wenn Sie das , après except erhalten Sie global name 'e' is not defined was nicht viel besser ist als eine falsche Syntax.

20 Stimmen

@Val: Sollte sein except Exception as e o except Exception, e je nach Python-Version.

25voto

jdhao Punkte 17638

Verwendung von str(e) o repr(e) um die Ausnahme darzustellen, erhalten Sie nicht den tatsächlichen Stack-Trace, so dass es nicht hilfreich ist, um herauszufinden, wo die Ausnahme liegt.

Nach der Lektüre anderer Antworten und der Logging-Package-Doku funktionieren die folgenden beiden Möglichkeiten hervorragend, um den tatsächlichen Stack-Trace zur leichteren Fehlersuche auszugeben:

verwenden. logger.debug() mit Parameter exc_info

try:
    # my code
except SomeError as e:
    logger.debug(e, exc_info=True)

verwenden. logger.exception()

oder wir können direkt verwenden logger.exception() um die Ausnahme zu drucken.

try:
    # my code
except SomeError as e:
    logger.exception(e)

24voto

Peter Punkte 599

Sie können verwenden logger.exception("msg") für die Protokollierung von Ausnahmen mit Traceback:

try:
    #your code
except Exception as e:
    logger.exception('Failed: ' + str(e))

0 Stimmen

Zufälligerweise, e.msg ist die String-Repräsentation von Exception Klasse.

6 Stimmen

Oder einfach logger.exception(e) .

21voto

Chuan Ma Punkte 9378

Nach Python 3.6 können Sie formatierte String-Literale verwenden. Das ist klasse! ( https://docs.python.org/3/whatsnew/3.6.html#whatsnew36-pep498 )

try
 ...
except Exception as e:
    logger.error(f"Failed to upload to ftp: {e}")

13voto

Heini Høgnason Punkte 637

Sie können versuchen, den BaseException-Typ explizit anzugeben. Dadurch werden jedoch nur Ableitungen von BaseException abgefangen. Dies schließt zwar alle von der Implementierung bereitgestellten Ausnahmen ein, aber es ist auch möglich, beliebige Klassen des alten Typs auszulösen.

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

13voto

starriet Punkte 990

Wenn Sie die ursprüngliche Fehlermeldung sehen möchten, ( Datei & Zeilennummer )

import traceback
try:
    print(3/0)
except Exception as e:    
    traceback.print_exc() 

Es wird dieselbe Fehlermeldung angezeigt, als wenn Sie die Option try-except .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X