2013-05-09 16 views

Odpowiedz

6

Od wersji Python 2.5 dostępny jest nowy BaseException, który służy jako klasa podstawowa dla Exception. W rezultacie coś w rodzaju GeneratorExit, które jest bezpośrednio związane z BaseException, zostanie przechwycone przez except:, ale nie przez except Exception:.

+2

+1 za wspomnienie o 'BaseException'. Jedna ważna rzecz, która 'z wyjątkiem:' przechwytuje, że 'z wyjątkiem wyjątku:' nie jest 'KeyboardInterrupt'. Liberalne użycie nagiego 'except '' może utrudnić powstrzymanie twoich skryptów! – kindall

+0

To prawda. [KeyboardInterrupt] (http://docs.python.org/2/library/exceptions.html#exceptions.KeyboardInterrupt) również dziedziczy po BaseException. – marcoseu

+0

SystemExit również dziedziczy po BaseExcrption –

0

To z doc

Jeśli wystąpi wyjątek, który nie pasuje do wyjątku nazwie w wyjątkiem klauzuli, jest ona przekazywana do zewnętrznych instrukcji try; jeśli nie zostanie znaleziony handler , jest to nieobsługiwany wyjątek i wykonywanie kończy się z komunikatem , jak pokazano powyżej.

Możesz być nawet bardziej szczegółowy.

>>> while True: 
...  try: 
...   x = int(raw_input("Please enter a number: ")) 
...   break 
...  except ValueError: 
...   print "Oops! That was no valid number. Try again..." 

Tutaj wpisz wyjątkiem klauzuli tylko jeśli stoją nazwany błąd, ValueError

Powiązane problemy