2017-01-11 1 views
12

Momentan, ich fange die Ausnahme in der except Exception: Klausel, und tun print(exception). Das Ergebnis liefert keine Informationen, da es immer druckt. Ich wusste, dass das in Python 2 funktioniert, aber wie mache ich das in Python3?Wie eine Ausnahme in Python 3 drucken?

+1

Dies macht keinen Sinn, was 'exception' genau gebunden ist? Bitte posten Sie das Snippet, wo dieses Verhalten auftaucht und vor allem den Teil, wo der Name 'exception' initialisiert wird. –

Antwort

29

Ich vermute, dass Sie die Exception einer Variablen zugewiesen werden müssen. Als shown in the Python 3 tutorial:

def fails(): 
    x = 1/0 

try: 
    fails() 
except Exception as ex: 
    print(ex) 

Um eine kurze Erklärung zu geben, ist as ein pseudo-Zuweisungs Schlüsselwort in bestimmten zusammengesetzten Anweisungen verwendet, um die vorangehende Erklärung eines Variablen zuweisen oder Alias.

In diesem Fall weist as die erfasste Ausnahme einer Variablen zu, die es ermöglicht, Informationen über die Ausnahme zu speichern und später zu verwenden, anstatt sie sofort behandeln zu müssen. (Dies im Detail in der Python 3 Language Reference: The try Statement diskutiert wird.)


Die andere zusammengesetzte Anweisung as Verwendung ist die with Anweisung:

@contextmanager 
def opening(filename): 
    f = open(filename) 
    try: 
     yield f 
    finally: 
     f.close() 

with opening(filename) as f: 
    # ...read data from f... 

Hier werden with Anweisungen verwendet, um die Ausführung eines Blocks umwickeln mit Methoden definiert durch context managers. Dies funktioniert wie eine erweiterte try...except...finally-Anweisung in einem ordentlichen Generatorpaket, und die as-Anweisung weist das vom Generator erzeugte Ergebnis vom Kontextmanager einer Variablen zur erweiterten Verwendung zu. (Dies ist im Detail in den Python 3 Language Reference: The with Statement diskutiert.)


Schließlich kann as verwendet werden, wenn Module zu importieren, um ein Modul zu einem anderen (in der Regel kürzer) Namen alias:

import foo.bar.baz as fbb 

Dieses wird detailliert in der Python 3 Language Reference: The import Statement diskutiert.

7

Versuchen

except Exception as e: 
    print(e) 
8

Dies sind die Änderungen seit Python 2: auf den Namen

try: 
    1/0 
except Exception as e: # (as opposed to except Exception, e:) 
         #^that will just look for two classes, Exception and e 
    print(e) # for the repr 
    print(str(e)) # for just the message 
    print(e.args) # the arguments that the exception has been called with. 
        # the first one is usually the message.