In Python sind die durch Fehler ausgelösten Ausnahmen wie folgt
Verschiedene Ausnahmen in Python können durch unterschiedliche Typen, eine Ausnahmeidentifikation, identifiziert werden Ein Fehler.
AttributeError Versuch, auf einen Baum zuzugreifen, der kein Objekt hat, wie z. B. foo.x, aber foo hat kein Attribut
ImportError Fehler beim Importieren von Modul oder Paket; Name# TypeError:int类型不可迭代 for i in 3: pass # ValueError num=input(">>: ") #输入hello int(num) # NameError aaa # IndexError l=['egon','aa'] l[3] # KeyError dic={'name':'egon'} dic['age'] # AttributeError class Foo:pass Foo.x # ZeroDivisionError:无法完成计算 res1=1/0 res2=1+'str'
try: 被检测的代码块 except 异常类型: try中一旦检测到异常,就执行这个位置的逻辑
try: f = [ 'a', 'a', 'a','a','a', 'a','a',] g = (line.strip() for line in f) #元组推导式 print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) except StopIteration: f.close()
s1 = 'hello' try: int(s1) except IndexError as e: # 未捕获到异常,程序直接报错 print(e)
else-Klausel wird ausgeführt, wenn in der try-Klausel keine Ausnahme auftritt.
s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e) except Exception as e: print(e)
Reinigungsverhalten definieren:
for arg in sys.argv[1:]: try: f = open(arg, 'r') except IOError: print('cannot open', arg) else: print(arg, 'has', len(f.readlines()), 'lines') f.close()
# Unabhängig von der Ausnahme oder nicht, dieses Modul wird ausgeführt, normalerweise zur Reinigung
Python verwendet die raise-Anweisung, um eine bestimmte Ausnahme auszulösen. Das Syntaxformat von
s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e) #except Exception as e: # print(e) else: print('try内代码块没有异常则执行我') finally: print('无论异常与否,都会执行该模块,通常是进行清理工作')
raise [Exception [, args [, traceback]]]
try: raise TypeError('抛出异常,类型错误') except Exception as e: print(e)
Sie können Ihre eigenen Ausnahmen haben, indem Sie eine neue Ausnahmeklasse erstellen. Die Ausnahmeklasse erbt entweder direkt oder indirekt von der Exception-Klasse, zum Beispiel:
In diesem Beispiel wird der Standardwert __init__() der Exception-Klasse überschrieben.
try: raise NameError('HiThere') except NameError: print('An exception flew by!') raise #An exception flew by! #Traceback (most recent call last): # File "", line 2, in ? #NameError: HiThere
Die meisten Ausnahmenamen enden mit „Error“, genau wie Standard-Ausnahmenamen.
class EgonException(Exception): def __init__(self, msg): self.msg = msg def __str__(self): return self.msg try: raise EgonException('抛出异常,类型错误') except EgonException as e: print(e) #抛出异常,类型错误
6. Assert
Assertions können direkt einen Fehler zurückgeben, wenn die Bedingungen für die Ausführung des Programms nicht erfüllt sind, ohne dass nach der Ausführung darauf gewartet werden muss, dass das Programm abstürzt.
Das Syntaxformat ist wie folgt:
class Error(Exception): """Base class for exceptions in this module.""" pass class InputError(Error): """Exception raised for errors in the input. Attributes: expression -- input expression in which the error occurred message -- explanation of the error """ def __init__(self, expression, message): self.expression = expression self.message = message class TransitionError(Error): """Raised when an operation attempts a state transition that's not allowed. Attributes: previous -- state at beginning of transition next -- attempted new state message -- explanation of why the specific transition is not allowed """ def __init__(self, previous, next, message): self.previous = previous self.next = next self.message = message
entspricht:
assert expression
assert. Es können auch Parameter folgen:
if not expression: raise AssertionError
assert expression [, arguments]
Das folgende Beispiel ermittelt, ob das aktuelle System Linux ist. Wenn die Bedingungen nicht erfüllt sind, wird die Ausnahme direkt ausgelöst, es ist nicht erforderlich, den nächsten Code auszuführen:
if not expression: raise AssertionError(arguments)
Das obige ist der detaillierte Inhalt vonAnalyse von Beispielen zur Ausnahmebehandlung in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!