2017-05-23 5 views
1
#!/usr/bin/env python 

#import re 


def test_ex1(input): 
    if re.match(r'^[A-Z]+$',input): 
     print 'Match' 
     return True 
    print 'No Match' 
    return False 


#test_ex1('ABC') 
try: 
    test_ex1('ABC') 
except Exception: 
    raise Exception 

Wenn ich das obige Programm ausführen, wird es folgende Ausnahmemeldung drucken.drucken Ausnahme Details rekursiv während versuchen, mit der Ausnahme,

a:~/Python> python test.py 
Traceback (most recent call last): 
    File "test.py", line 18, in <module> 
    raise Exception 
Exception 

Was ist der richtige Weg in Python zu dem folgenden Stack-Trace machen zu drucken, während Ausnahme try except mit Fang ohne test_ex1 Unterprogramm zu ändern?

Traceback (most recent call last): 
    File "test.py", line 15, in <module> 
    test_ex1('ABC') 
    File "test.py", line 8, in test_ex1 
    if re.match(r'^[A-Z]+$',input): 
NameError: global name 're' is not defined 
+0

Haben Sie die Ausnahme erneut erhöhen wollen? – vaultah

+0

Werfen Sie einen Blick auf [die Dokumentation] (https://docs.python.org/3/library/traceback.html) –

+0

Wie drucke ich alle Ausnahmen rekursiv, ohne einen 'print_exc' Aufruf in jeder Funktion innerhalb einer Funktion hinzuzufügen? – Jean

Antwort

-1

ich einmal verwendet folgenden alle Zurückverfolgungs als drucken:

import sys 

try: 
    # code here 
except Exception: 
    print(sys.exc_info()[0]) 

Das raise Schlüsselwort verwendet wird Ihre Fehler zu werfen, um den Stapel und an der oberen Ebene der Funktionsaufruf zu behandeln.

+0

Dies beantwortet die Frage nicht. OP möchte das ** Traceback ** drucken. –

+0

Ich habe meine Antwort oben bearbeitet. Ich habe die Frage falsch verstanden. Das tut mir leid. –

1

Eine Möglichkeit wird mit dem traceback Modul

import traceback 

try: 
    re.match() 
except Exception: 
    traceback.print_exc() 
+0

Kann ich dies tun, ohne die Unterroutine 'test_ex1' zu berühren? – Jean

+0

@Jean Natürlich müssen Sie es nicht ändern. Probieren Sie Folgendes aus: Schreiben Sie im Körper "except" einfach "pass". Nichts wird gedruckt. Setzen Sie nun 'traceback.print_exc()'. Die Rückverfolgung wird gedruckt. Keine Änderung war erforderlich. –

+1

Wenn Sie meinen, dass Sie dies einfach fallen lassen und 'test_ex1' in den' try' Block verwenden können, dann können Sie ja. In diesem Sinne möchten Sie vielleicht den Namen des Parameters ändern, "input" ist eine eingebaute Funktion in Python. –

Verwandte Themen