2017-01-11 19 views
12

Teraz przechwytuję wyjątek w klauzuli except Exception: i robię print(exception). Wynik nie zawiera informacji, ponieważ zawsze drukuje <class 'Exception'>. Wiedziałem, że to działa w Pythonie 2, ale jak mam to zrobić w python3?Jak wydrukować wyjątek w Pythonie 3?

+1

To nie ma sensu, co jest związane z nazwą 'exception' dokładnie? Opublikuj fragment kodu, w którym pojawia się to zachowanie, i najbardziej znaczącą część, w której zainicjowano nazwę "exception". –

Odpowiedz

29

Zgaduję, że trzeba przypisać Exception do zmiennej. Jak shown in the Python 3 tutorial:

def fails(): 
    x = 1/0 

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

Aby dać krótkie wyjaśnienie, as jest kluczowe pseudo-przypisanie stosowane w niektórych sprawozdaniach złożonych do cesji lub alias poprzedni oświadczenie do zmiennej.

W tym przypadku as przypisuje złapany wyjątek do zmiennej, która pozwala uzyskać informacje o wyjątku przechowywanym i używanym później, zamiast konieczności natychmiastowego rozpatrzenia. (Jest to omówione szczegółowo w Python 3 Language Reference: The try Statement.)


Inne stwierdzenie związku używając as jest stwierdzenie with:

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

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

Tutaj with instrukcje są używane do owijania wykonanie bloku z metody zdefiniowane przez context managers. Działa to jak przedłużone oświadczenie try...except...finally w pakiecie czystego generatora, a instrukcja as przypisuje wygenerowany przez generator wynik z menedżera kontekstów do zmiennej w celu jej wydłużenia. (Jest to omówione szczegółowo w Python 3 Language Reference: The with Statement.)


Wreszcie as można stosować podczas importu modułów skojarzenie modułu z innym (zwykle krócej) Nazwa:

import foo.bar.baz as fbb 

ten jest szczegółowo omówiony w Python 3 Language Reference: The import Statement.

7

Spróbuj

except Exception as e: 
    print(e) 
8

Są to zmiany od pytona 2:

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.