Latest web development tutorials

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ć .... chyba ... 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:
    正常的操作
   ......................
except:
    发生异常,执行这块代码
   ......................
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:
    正常的操作
   ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
   发生以上多个异常中的一个,执行这块代码
   ......................
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:
    正常的操作
   ......................
except ExceptionType, Argument:
    你可以在这输出 Argument 的值...

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