Python
では、例外オブジェクト (例外オブジェクト)
は、コードの実行中に発生する異常な状況を表すために使用されます。実行中のプログラムが爆発する エラーが発生した場合、例外がスローされます。
例外が正しく処理されない場合、操作は終了します。
製品の開発中に例外が発生し、例外の原因を報告しなかった場合、非常に不快な思いをし、異常な問題を解決するのが困難になることが想像できます。
製品の安定性と柔軟性を向上させるために、Python
は開発者がさまざまな例外をキャプチャして処理するように実行します。KeyError 例外クラス
などの一般的な内部モジュール エラーは次のとおりです。より一般的なものですが、もちろん他にもたくさんあります。
簡単に理解すると、Python はコード実行エラーを構文エラー(構文エラー)
と例外(例外)#の 2 つのカテゴリに分類します。 ##。
>>> if for not in list(1,2,3,4) File "<stdin>", line 1 if for not in list(1,2,3,4) ^ SyntaxError: invalid syntax上記のエラー レポートから、それが構文エラーであり、無効な構文であることがわかります。そして、エラーは
for の位置にあると指摘しました。明らかに
if と
for を併用することはできません。
>>> a = 5 / 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: division by zeroエラー メッセージは明らかに、除数として 0 が正しくないことを示しています。 例外処理エラーと例外を理解したら、例外を処理する必要があります。構文エラーなどの問題は、練習を重ねることで回避できます。2 番目の例外については、
python は、それを処理するための
try-excel ステートメントを提供します。
try-excel ステートメントを追加することで例外をキャプチャして処理します。 # 次に、ターミナルで関数を呼び出してみます:
def division(x, y): try: return x / y except ZeroDivisionError: print("0不能作为除数!!!")出力:
0 は除数として使用できません。 ! !
次は、入力が間違っており、理論的にはエラーが報告されるはずですが、エラーは報告されず、段落が返されました。
try-Except
ステートメントがどのように機能するかを説明します。#例外が発生しない場合は、Except コード ブロックをスキップして Try-Except を終了します。
division(x=1, y=0)
If any例外リスト内の例外式がキャプチャされると、
excelもちろん、各例外を個別に処理したい場合は、1 つずつ処理することもできます:
except (RuntimeError, TypeError, NameError):pass
Python の例外タイプは継承できます。ここで知っておく必要があるのは、Exceptions の継承後に例外タイプが指定されているかどうかだけです。前の例外からの情報を取得するため、後続の例外もキャッチされます。例は次のとおりです: <pre class="brush:php;toolbar:false">def passpass(x=1):
try:
return print(x+x)
except (RuntimeError, TypeError, NameError):
pass
except TypeError:
print('参数错误啦~')
except NameError:
print('名称错误啦~')</pre>
は出力します:
BC
逆に、Except の順序を逆にすると、A だけが出力されます。例外 B と C は両方とも A を継承しているため、B 例外をキャッチして終了します。
class A(Exception): pass class B(A): pass class C(B): pass for cls in [A, B, C]: try: raise cls() except C: print('C') except B: print('B') except A: print('A')
出力はすべてですA:
#A
A
A
すべての例外を 1 つずつ抽出すると非常に面倒になります。例外タイプが例外に設定されていない場合、残りのすべてのキャッチされなかった例外がキャッチされます:
class A(Exception): pass class B(A): pass class C(B): pass for cls in [A, B, C]: try: raise cls() except A: print('A') except B: print('B') except C: print('C')
重要な関数: else.
else ステートメントは、追加の操作を実行するために使用されます。たとえば、次のようになります。一部のファイル操作は try コード ブロックで実行され、リソースは else で解放されます。else の構文形式は次のとおりです:def passpass(x=1): try: return print(x/x) except TypeError: print('参数错误啦~') except NameError: print('名称错误啦~') except: print('报错啦~自己查')
もちろん、次のように例外を操作することもできます:
try: pass except: pass else: pass例外を個別にスローする
通常の状況では、開発者は実行エラーを起こしませんが、設計ロジックには準拠していません。したがって、開発者は積極的に例外をスローする必要があります。 raise ステートメントを使用して例外をスローするには:
def passpass(x=1): try: return print(x/x) except TypeError as error: print('参数错误啦~', error) except NameError: print('名称错误啦~') except: print('报错啦~自己查')
カスタマイズされた例外
Python の組み込み例外が開発ニーズを満たせない場合は、例外をカスタマイズできます。
自定义异常类必须要直接或间接继承自Exception类。尽管自定义异常类与其他类具有相同的功能,但为保持简洁,应该仅提高必要的属性。
class Error(Exception): """Base class for exception 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 winerror """ def __init__(self, expression, message): self.expression = expression self.message = message
else在代码正常执行后才会被执行的代码块,但有些情况无论代码块是否出现异常都要执行,则需要用到finally语句:
def passpass(x=1): try: return print(x/x) except TypeError as error: print('参数错误啦~', error) except NameError: print('名称错误啦~') except: print('报错啦~自己查') finally: print('运算结束~')
以上がPython基礎講座の例外処理の方法とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。