Pythonの例外は何ですか? Python の例外の詳細な紹介

不言
リリース: 2018-09-26 15:54:31
オリジナル
2836 人が閲覧しました

この記事では、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: &#39;aa&#39;
>>> f = open("aaa.txt","r")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: &#39;aaa.txt&#39;
ログイン後にコピー

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("----------")
# 输出结果
出现异常-->英文字母不能转换为数字
----------
ログイン後にコピー
②)。 マルチブランチ例外。異なる例外をキャッチする必要がある場合、複数の例外を使用できます。例外情報を取得する必要がある場合は、行 7

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
----------
ログイン後にコピー
2) を除いて使用できます。ステートメント

##① 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: &#39;aa&#39;
-----------
ログイン後にコピー

上記のように、 test2 の 2 行目で例外が発生した場合、その例外は 5 行目に渡されます。test2 を呼び出すステートメントで渡されます。ここにはまだ例外処理ステートメントがありません。引き続き上位層に渡され、 によってキャッチされます。

#5. 例外をスローします raise

1) 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
ログイン後にコピー
2) はカスタム例外

をスローします。

抛出自定义异常首先得有个自定义的异常类,注:自定义的异常必须直接或间接的继承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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート