obsługa wyjątków Python
Python udostępnia dwie bardzo ważne funkcje do obsługi wyjątków i błędów programu Pythona, który pojawia się w pracy. Można użyć tej funkcji do programów python debugowania.
- Obsługa wyjątków: Python strona poradnik szczegółowy.
- Assert (twierdzeń): Python strona poradnik szczegółowy opis.
Standardowe python wyjątki
Nazwa wyjątku | opis |
---|---|
BaseException | Klasa bazowa wszystkich wyjątków |
SystemExit | Tłumaczka wniosek, aby wyjść |
KeyboardInterrupt | Użytkownik Przerwać Realizująca (zwykle wprowadzić ^ C) |
wyjątek | Błąd ogólny klasy bazowej |
StopIteration | Iterator nie więcej wartości |
GeneratorExit | Generator (generator) powiadomić nieprawidłowe wyjście |
StandardError | Wszystkie wbudowany w standardzie klasy bazowej dla wyjątków |
ArithmeticError | Wszystko liczbowa klasa bazowa błędów |
FloatingPointError | błąd w obliczeniach zmiennoprzecinkowych |
OverflowError | operacje numeryczne przekroczony maksymalny limit |
ZeroDivisionError | Oprócz (lub modułu) zero (wszystkie typy danych) |
AssertionError | awaria twierdzenie |
AttributeError | Ten obiekt ma własność |
EOFError | Brak wbudowanego wejścia i przybywający znacznik EOF |
EnvironmentError | Operating system error klasy bazowej |
IOError | operacje wejścia / wyjścia na niepowodzenie |
OSError | błąd systemu operacyjnego |
WindowsError | wywołanie systemowe nie powiodło się |
ImportError | Moduł importu / przedmiot zawiodły |
LookupError | Nieprawidłowy klasy zapytań bazy danych |
IndexError | Bez tego wskaźnika sekwencji (indeks) |
KeyError | Bez tego klucza mapowania |
MemoryError | Błąd przepełnienia pamięci (przez interpreter Pythona nie jest śmiertelne) |
NameError | Nierejestrowana / zainicjować obiektu (bez nieruchomości) |
UnboundLocalError | Dostęp do zmiennej lokalnej niezainicjowany |
ReferenceError | Słabe obiekty referencyjne (słaby odniesienia) zostały próby uzyskania dostępu do zbierania śmieci z |
RuntimeError | Ogólne Runtime error |
NotImplementedError | Metoda ta nie została wdrożona |
SyntaxError | Błąd składni Pythona |
IndentationError | tiret błędu |
TabError | Tab i przestrzeń mix |
SystemError | Błąd systemu Zazwyczaj interpreter |
TypeError | Nieprawidłowy typ operacji |
ValueError | Nieprawidłowe argumenty przekazywane w |
UnicodeError | Błędy związane z Unicode |
UnicodeDecodeError | Dekodowanie Unicode błędu |
UnicodeEncodeError | Błąd kodu Unicode |
UnicodeTranslateError | Błąd konwersji Unicode |
ostrzeżenie | Ostrzeżenie klasy bazowej |
DeprecationWarning | Ostrzeżenia o nieaktualnych funkcji |
FutureWarning | Ostrzeżenia dotyczące przyszłej struktury semantyki zmieniło |
OverflowWarning | Stary ostrzeżenie o automatycznie awansowany na długi Integer (długie) z |
PendingDeprecationWarning | Będzie to ostrzeżenie o charakterystyce odpadów |
RuntimeWarning | Podejrzane zachowanie środowiska wykonawczego (Runtime zachowanie) ostrzegawczy |
SyntaxWarning | Ostrzeżenia składni podejrzane |
UserWarning | Ostrzega generowanie kodu użytkownika |
Co to jest nienormalne?
Wyjątek ten jest wydarzeniem, które pojawią się w trakcie realizacji programu, wpływając na normalne wykonywanie programu.
W normalnych warunkach, gdy programy Python nie obsługują prawidłowo wystąpi wyjątek.
Wyjątkiem jest Pythona obiekt reprezentujący błąd.
Wyjątek występuje wtedy, gdy skrypt Pythona musimy uchwycić poradzić, w przeciwnym razie program zostanie zakończony.
Obsługa wyjątków
Można złapać wyjątek za pomocą try / except.
try / wyjątkiem instrukcja jest używana do wykrywania błędów w bloku try, tak że oprócz rachunku złapać wyjątek i przetwarzania informacji.
Jeśli nie chcesz, wyjątek występuje, gdy koniec programu, po prostu spróbuj złapać go w środku.
Składnia:
Poniżej znajduje się prosty spróbować plpl chyba pl. składni innym:
try: <语句> #运行别的代码 except <名字>: <语句> #如果在try部份引发了'name'异常 except <名字>,<数据>: <语句> #如果引发了'name'异常,获得附加的数据 else: <语句> #如果没有异常发生
starają prace, gdy zaczyna się oświadczenie spróbować jest, python będą oznaczone w ramach obecnego programu, tak, że kiedy występuje nieprawidłowość może być tu z powrotem, spróbuj zapis jest wykonywany po pierwsze, co dzieje się dalej, zależy od realizacji czy istnieje wyjątek.
- Jeśli wyjątek występuje podczas próby wykonania, jeżeli oświadczenie po Python wrócić i spróbować wykonać pierwsze dopasowanie wyjątkiem klauzuli wyjątek, przetwarzanie Wyjątkiem jest zakończone, przepływ sterowania na przez całą instrukcję try (chyba wyjątek jest przetwarzane razem i uruchamiają nowy wyjątkami).
- W przypadku wystąpienia nieprawidłowości w instrukcji try po latach, ale nie pasujące wyjątkiem klauzuli wyjątek zostanie przedstawiony w górnej części razem, albo w górnej części programu (który zakończy program i drukować domyślny komunikat o błędzie).
- Jeśli wystąpi wyjątek podczas próby klauzula nie jest wykonywany, Python else zostanie wykonane po rachunku (jeśli wtedy jeszcze), to przepływ kontroli przez cały instrukcji try.
Przykłady
Oto prosty przykład, otwiera plik, zawartość treści pliku jest napisane, a nie wyjątek występuje:
#!/usr/bin/python # -*- coding: UTF-8 -*- try: fh = open("testfile", "w") fh.write("这是一个测试文件,用于测试异常!!") except IOError: print "Error: 没有找到文件或读取文件失败" else: print "内容写入文件成功" fh.close()
Powyższe dane wyjściowe programu:
$ python test.py 内容写入文件成功 $ cat testfile # 查看写入的内容 这是一个测试文件,用于测试异常!!
Przykłady
Oto prosty przykład, otwiera plik, zawartość pisane w treści plików, ale plik nie ma uprawnień do zapisu wyjątek wystąpił:
#!/usr/bin/python # -*- coding: UTF-8 -*- try: fh = open("testfile", "w") fh.write("这是一个测试文件,用于测试异常!!") except IOError: print "Error: 没有找到文件或读取文件失败" else: print "内容写入文件成功" fh.close()
Przed wykonaniem kodu w celu ułatwienia badań, możemy najpierw usunąć zapisu do pliku testfile polecenia jest następująca:
chmod -w testfile
Następnie wykonać powyższy kod:
$ python test.py Error: 没有找到文件或读取文件失败
Wyjątkiem bez użycia typ wyjątku z
Można używać bez typu wyjątku z wyjątkiem poniższych przykładach:
try: 正常的操作 plplplplplplplplplplpl except: 发生异常,执行这块代码 plplplplplplplplplplpl else: 如果没有异常执行这块代码
Przede sposób try-except do połowu wszystkie wyjątki, które występują. Ale to nie jest dobry sposób, za pośrednictwem tego programu nie możemy zidentyfikować konkretne informacje o wyjątku. Bo to rejestruje wszystkie wyjątki.
I przy użyciu wielu typów poza wyjątkami
Można również korzystać z tego samego, z wyjątkiem sprawozdania obsłużyć wiele wyjątków, co następuje:
try: 正常的操作 plplplplplplplplplplpl except(Exception1[, Exception2[,pl.ExceptionN]]]): 发生以上多个异常中的一个,执行这块代码 plplplplplplplplplplpl else: 如果没有异常执行这块代码
try-finally
try-finally, czy wyjątek występuje dokona ostatecznego kodu.
try: <语句> finally: <语句> #退出try时总会执行 raise
Przykłady
#!/usr/bin/python # -*- coding: UTF-8 -*- try: fh = open("testfile", "w") fh.write("这是一个测试文件,用于测试异常!!") finally: print "Error: 没有找到文件或读取文件失败"
Jeśli otworzysz plik nie posiada uprawnień do zapisu, wyjście jest w następujący sposób:
$ python test.py Error: 没有找到文件或读取文件失败
Ten sam przykład można również zapisać w następujący sposób:
#!/usr/bin/python # -*- coding: UTF-8 -*- try: fh = open("testfile", "w") try: fh.write("这是一个测试文件,用于测试异常!!") finally: print "关闭文件" fh.close() except IOError: print "Error: 没有找到文件或读取文件失败"
Gdy wyrzucony wyjątek w bloku try, bloku finally kodu natychmiast.
wreszcie blokować wszystkie sprawozdania po jej wykonaniu, wyjątek jest uruchamiany ponownie i wykonanie wyjątkiem kodu blokowego.
Zawartość parametr jest inny niż wyjątkiem.
Nieprawidłowe parametry
Wyjątek mogą przyjmować parametry, jak parametry wyjściowe informacyjnych nieprawidłowości.
Można złapać wyjątek poprzez sprawozdania parametrów z następującymi wyjątkami:
try: 正常的操作 plplplplplplplplplplpl except ExceptionType, Argument: 你可以在这输出 Argument 的值pl.
Zmienne poboczna zazwyczaj zawarte w otrzymanym oświadczeniem wyjątku. Zmienne w postaci krotki mogą otrzymać jedną lub więcej wartości.
Krotka zazwyczaj zawiera ciąg błędów, błędnego numeru złym miejscu.
Przykłady
Poniżej przedstawiono przykłady jednym wyjątkiem:
#!/usr/bin/python # -*- coding: UTF-8 -*- # 定义函数 def temp_convert(var): try: return int(var) except ValueError, Argument: print "参数没有包含数字\n", Argument # 调用函数 temp_convert("xyz");
Wyniki powyższych procedur są następujące:
$ python test.py 参数没有包含数字 invalid literal for int() with base 10: 'xyz'
Wyzwalanie nieprawidłowe
Możemy użyć instrukcji do podniesienia sami wywołać wyjątek
podniesienia składnia jest następująca:
raise [Exception [, args [, traceback]]]
Oświadczenie Wyjątkiem jest typ wyjątku (np NameError) parametr jest nieprawidłowy wartość parametru. Ten parametr jest opcjonalny, jeśli nie pod warunkiem, argument Wyjątkiem jest "brak".
Ostatni argument jest opcjonalny (rzadko stosowane w praktyce), jeśli istnieje obiekt wyjątku śladu.
Przykłady
Wyjątkiem może być ciągiem znaków, klasę lub obiekt. Wyjątkiem Pythona dostarczanych przez jądro, w większości są instancjami klasy, która jest parametrem instancji klasy.
Bardzo proste określenie wyjątkiem, a mianowicie:
def functionName( level ): if level < 1: raise Exception("Invalid level!", level) # 触发异常后,后面的代码就不会再执行
Uwaga: Aby móc złapać wyjątek, "poza" oświadczenie musi być użyteczny, aby rzucić ten sam obiekt klasy wyjątku lub łańcuch.
Na przykład, możemy zrobić więcej niż wyjątek, "poza" oświadczenie jest w następujący sposób:
try: 正常逻辑 except "Invalid level!": 触发自定义异常 else: 其余代码
Przykłady
#!/usr/bin/python # -*- coding: UTF-8 -*- # 定义函数 def mye( level ): if level < 1: raise Exception("Invalid level!", level) # 触发异常后,后面的代码就不会再执行 try: mye(0) // 触发异常 except "Invalid level!": print 1 else: print 2
Realizacja powyższego kodu, wyjście jest:
$ python test.py Traceback (most recent call last): File "test.py", line 11, in <module> mye(0) File "test.py", line 7, in mye raise Exception("Invalid level!", level) Exception: ('Invalid level!', 0)
Wyjątki definiowane przez użytkownika
Tworząc nową klasę wyjątku, program może wymienić swoje wyjątki. Typowe wyjątki powinny być dziedziczone z klasy Exception, bezpośrednio lub pośrednio.
Obserwowany jest związany z RuntimeError instancji przykład utworzyć klasę, klasa bazowa jest RuntimeError, do wyprowadzania dodatkowych informacji, gdy wyjątek jest wyzwalany.
W bloku try, użytkownik wykonuje oświadczenie bloku oprócz niestandardowego wyjątku e zmienna jest używana do tworzenia instancji Networkerror klasę.
class Networkerror(RuntimeError): def __init__(self, arg): self.args = arg
Po zdefiniowaniu powyższych kategorii, można wywołać wyjątek, a mianowicie:
try: raise Networkerror("Bad hostname") except Networkerror,e: print e.args