Jak wydrukować błąd w Pythonie?
try:
something here
except:
print 'the whatever error occurred.'
Jak mogę wydrukować błąd w moim bloku except:
?
6 answers
Dla Pythona 2.6 i nowszych oraz Pythona 3.x:
except Exception as e: print(e)
Dla Pythona 2.5 i wcześniejszych, użyj:
except Exception,e: print str(e)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-16 08:01:37
The traceback
Moduł dostarcza metody dla formatowania i drukowania WYJĄTKÓW i ich znaczników, np. wypisuje wyjątek tak jak robi to domyślna obsługa:
import traceback
try:
1/0
except Exception:
traceback.print_exc()
Wyjście:
Traceback (most recent call last):
File "C:\scripts\divide_by_zero.py", line 4, in <module>
1/0
ZeroDivisionError: division by zero
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-19 15:44:27
W Python 2.6 lub Nowszy jest nieco czystszy:
except Exception as e: print(e)
W starszych wersjach jest jeszcze całkiem czytelny:
except Exception, e: print e
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-02 13:42:25
Jeśli chcesz przekazać ciągi błędów, oto przykład z błędy i wyjątki (Python 2.6)
>>> try:
... raise Exception('spam', 'eggs')
... except Exception as inst:
... print type(inst) # the exception instance
... print inst.args # arguments stored in .args
... print inst # __str__ allows args to printed directly
... x, y = inst # __getitem__ allows args to be unpacked directly
... print 'x =', x
... print 'y =', y
...
<type 'exceptions.Exception'>
('spam', 'eggs')
('spam', 'eggs')
x = spam
y = eggs
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-27 12:26:49
Jeden błąd liner podnoszenie może być wykonane z twierdzenia, jeśli to jest to, co chcesz zrobić. Pomoże Ci to napisać statycznie naprawialny kod i wcześnie sprawdzić błędy.
assert type(A) is type(""), "requires a string"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-01 15:15:56
(miałem to zostawić jako komentarz do odpowiedzi @jldupont, ale nie mam wystarczającej reputacji.)
Widziałem odpowiedzi podobne do odpowiedzi @jldupont również w innych miejscach. FWIW, myślę, że warto zauważyć, że to:
except Exception as e:
print(e)
Domyślnie wyświetli wynik błędu na sys.stdout
. Bardziej odpowiednie podejście do obsługi błędów w ogóle byłoby:
except Exception as e:
print(e, file=sys.stderr)
(zauważ, że musisz import sys
aby to zadziałało.) W ten sposób błąd jest wypisywany do STDERR
zamiast STDOUT
, które pozwala na poprawne parsowanie/przekierowanie/etc. Rozumiem, że pytanie było ściśle o "drukowanie błędu" , ale wydaje się ważne, aby wskazać najlepszą praktykę tutaj, a nie pomijać ten szczegół, który może prowadzić do niestandardowego kodu dla każdego, kto w końcu nie uczy się lepiej.
Nie użyłem modułu traceback
jak w odpowiedzi Cat Plus Plus, i może to najlepszy sposób, ale pomyślałem, że to wyrzucę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-21 19:38:43