この記事では、Python の例外とは何なのかについて説明します。 Python の例外の詳細な紹介は一定の参考価値がありますので、困っている友人は参考にしていただければ幸いです。
Python の例外は 2 種類に分類されます: 1) 構文エラー: コードが Python インタプリタの構文検出を通過しない場合、コードは実行できません 2) 例外: 実行中に検出されたエラーPython プログラムの実行は例外と呼ばれます。例外処理が行われない場合、プログラムは終了し、次のような例外情報が表示されます: ① 文字列を数値に変換するときの型変換例外、② ファイルを読み取るときのファイルが存在しない例外、③ ネットワーク リンク中のホスト到達不能例外。 .. ・待って。 Python スクリプトで例外が発生した場合は、それをキャッチして処理する必要があります。そうしないと、プログラムの実行が終了します。 結局のところ、使用しているプログラムが突然クラッシュすることは誰も望んでいません
1. 構文エラー
python 構文エラーは多くの初心者がよく遭遇する問題です。このタイプのエラーは比較的低レベルです。コードをさらに数回入力することで、このようなエラーを減らすことができます
#
>>> if Trur File "<stdin>", line 1 if Trur ^ SyntaxError: invalid syntax >>> print("as")) File "<stdin>", line 1 print("as")) ^ SyntaxError: invalid syntax
例: このようなエラーは構文エラーです。1 行目の末尾の if ステートメントには「:」がありません。また、6 行目の末尾には「)」が多すぎます。
2. 例外
1) 実行時に検出されるエラーは例外と呼ばれますが、Python の構文検出ではそのようなエラーは検出できません。
>>> int("aa") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: 'aa' >>> f = open("aaa.txt","r") Traceback (most recent call last): File "<stdin>", line 1, in <module> FileNotFoundError: [Errno 2] No such file or directory: 'aaa.txt'
1 行目と 5 行目で例外が発生します。例外を確認してください。次のような出力情報が表示されます。以下
#2) Python の標準例外クラス
BaseException がベースです
その他の Python 例外クラスについては、個別に説明しません。Baidu See# を参照してください。
3.例外処理##プログラムの堅牢性を高め、例外発生時のプログラムのクラッシュを防ぐため、必要に応じて例外を処理します。処理が必要です
1) try-excel: ステートメント
① 最も単純な例外処理ステートメントは次のとおりです。try ステートメントがブロックされている場合で例外が発生すると、後続のステートメントは実行されなくなり (3 行目)、例外は else によってキャッチされ、プログラムは、excel のステートメント ブロックを実行した後も下方向に実行を続けます (6 行目など)。注: Except の後に例外タイプが続くことはなく、デフォルトですべての例外がキャッチされます (
try: int("aaa") print("---aaa---") except: print("出现异常-->英文字母不能转换为数字") print("----------") # 输出结果 出现异常-->英文字母不能转换为数字 ----------
try: nu = int("100") print("转换后的值nu:", nu) i = 1 / 0 except ValueError: print("出现异常-->英文字母不能转换为数字") except ZeroDivisionError as e: # 通过 as 变量名 获取异常的对象 print("出现异常-->除数不能为零") print("异常的提示信息-->", e) except: pass print("----------") # 输出结果 转换后的值nu: 100 出现异常-->除数不能为零 异常的提示信息--> division by zero ----------
③ のように、変数名として例外オブジェクトを取得できます。同じ例外で複数の例外を押す必要があります。処理メソッドは、(ValueError, [ZeropisionError [, NameError]]):
try: i = 1 / 0 nu = int("aa") except (ValueError, ZeroDivisionError) as e: print(e) except: pass print("----------") # 输出结果 division by zero ----------
##① try-excel-else-finally にfinally ステートメントが出現すると、例外が発生するかどうかに関係なく、finally ステートメント ブロック内のステートメントが実行されます。 else ステートメントは、例外が発生しない場合にのみ実行されます
例外が発生した場合、try-excel-else-finally は次のようになります##
try: i = 1 / 0 print("没有出现异常i值", i) except Exception as e: print("出现异常-->", e) else: print("没有出现异常-->执行else") finally: print("不管是否出现异常,这里的语句一定会被执行") # 输出结果 出现异常--> division by zero 不管是否出现异常,这里的语句一定会被执行
例外が発生しない場合、try-excel-else-finally は次のようになります。
try: i = 1 / 1 print("没有出现异常i值", i) except Exception as e: print("出现异常-->", e) else: print("没有出现异常-->执行else") finally: print("不管是否出现异常,这里的语句一定会被执行") # 输出结果 没有出现异常i值 1.0 没有出现异常-->执行else 不管是否出现异常,这里的语句一定会被执行
②. try-excel-else-finally は単独で使用することもできます。形式は 3 つあります: 1) try-excel-finally 2) try-excel-else 3) try-finally。コードはここには表示されません
4. 例外の配信
例外が発生したステートメント内に例外を処理するステートメントがない場合例外を処理するステートメントが見つかるまで、または Python インタプリタがプログラムを終了するまで、レイヤーを通過します。
def test2(): int("aa") def test1(): test2() try: test1() except Exception as e: print(e) print("-----------") # 输出结果 invalid literal for int() with base 10: 'aa' -----------
上記のように、 test2 の 2 行目で例外が発生した場合、その例外は 5 行目に渡されます。test2 を呼び出すステートメントで渡されます。ここにはまだ例外処理ステートメントがありません。引き続き上位層に渡され、 によってキャッチされます。
#5. 例外をスローします raise1) python
# で定義された例外をスローします##例外の型を呼び出すことで例外をスローでき、スローされた例外も例外によってキャッチされます。以下に示すように、行 4
age = 500 try: if age < 0 or age > 200: raise ValueError("age范围0-200") print("age", age) except ValueError as e: print("出现异常-->", e) # 输出结果 出现异常--> age范围0-200
をスローします。
抛出自定义异常首先得有个自定义的异常类,注:自定义的异常必须直接或间接的继承Exception基类
class MyException(Exception): # 自定义异常类 def __init__(self, msg): self.msg = msg age = 500 try: if age < 0 or age > 200: raise MyException("age范围0-200") # 抛出自定义异常 print("age", age) except MyException as e: print("出现异常-->", e) # 输出结果 出现异常--> age范围0-200
当然自定义异常类也可以拥有许多的功能,就得看需求添加啦
6、在异常处理中抛出异常
有某需求:当捕获到异常时处理完后想继续抛出异常.....
在except中用raise可以抛出当前异常
try: i = 1 / 0 # 异常的语句 except Exception as e: print("出现异常-->", e) raise # 处理完后继续抛出异常,raise表示抛出当前异常 print("-------------") # 输出结果 出现异常--> division by zero Traceback (most recent call last): File "<stdin>", line 2, in <module> i = 1 / 0 ZeroDivisionError: division by zero
以上がPythonの例外は何ですか? Python の例外の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。