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?
Odpowiedz
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.
Spróbuj
except Exception as e:
print(e)
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.
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". –