2009-09-27 11 views
249
try: 
    something here 
except: 
    print 'the whatever error occurred.' 

Jak mogę wydrukować błąd w moim bloku except:?Jak wydrukować błąd w Pythonie?

+0

Proponuję zmianę tytułu: nie jesteś druk __error__, drukujesz __exception__. Oni są różni. – FaithReaper

Odpowiedz

352

dla Pythona 2.6 i nowszych:

except Exception as e: print(e) 

dla Pythona 2.5 i wcześniejszych, stosowanie :

except Exception,e: print str(e) 
+1

Wygląda jak najbliżej tego, co chciał OP. – physicsmichael

+18

Część 'str()' jest zbędna - 'print e' jest dokładnie tym samym, co' print str (e) '[[tj.' Print' ma własną strufikację]]. –

+4

@alex: czy to nie zależy od podklasy (jeśli jest) wyjątku zgłoszonego? Metoda __repr__ mogła nie zostać zaimplementowana, dopóki może mieć __str__. W każdym razie nie ma dobrego zamiennika dla niekompletnej implementacji ;-) – jldupont

31

W przypadku, gdy chcesz przekazać ciągi błędach, tutaj jest przykład z Errors and Exceptions (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 
+3

Bardzo kompletny, chociaż "jak" nie działa przed pythonem 2.6 – foosion

160
Moduł

traceback zapewnia metody formatowania i drukowania wyjątki i ich informacje zwrotne, np. Wyjątek ten będzie drukować jak domyślnej obsługi robi:

except: traceback.print_exc() 
+21

To powinno być właściwą odpowiedzią –

+0

Zgadzam się z @KarthikT, że to rzeczywiście powinna być poprawna odpowiedź. –

2

One liner podnoszenie błąd można zrobić z wypowiedzi dochodzić, czy to, co chcesz robić. Pomoże Ci to napisać statycznie naprawialny kod i wcześnie sprawdzić błędy.


assert type(A) is type(""), "requires a string" 

145

W Python 2.6 lub większym to nieco czystsze:

except Exception as e: print(e) 

W starszych wersjach to wciąż dość czytelna:

except Exception, e: print e 
+10

W python3, należy użyć 1-szej ścieżki z "as". –