Pythonで例外を処理する方法は何ですか

anonymity
リリース: 2019-06-17 09:38:05
オリジナル
3561 人が閲覧しました

例外処理の使用: プログラムの堅牢性と耐障害性を確保するために、つまり、エラーが発生したときにプログラムがクラッシュしないようにするには、例外を処理する必要があります。

Pythonで例外を処理する方法は何ですか

1. エラーが発生する条件が予測可能な場合は、if を使用してエラーを処理し、エラーが発生する前に回避する必要があります。エラーが発生する条件が予測できない場合は、エラー発生後に try..excel: ハンドルを使用する必要があります

#基本的な構文は

#try:

です。検出されたコード ブロック

例外タイプを除く:

try で例外が検出されると、この場所のロジックが実行されます

AGE=10
while True:
    age=input('>>: ').strip()
    if age.isdigit(): #只有在age为字符串形式的整数时,下列代码才不会出错,该条件是可预知的
        age=int(age)
        if age == AGE:
            print('you got it')
            break
ログイン後にコピー

5. try. の詳細な使用方法。 .excel...

エラーを引き起こす可能性のあるステートメントを try モジュールに配置し、例外を処理するために例外を使用します。例外は、特定の例外またはかっこ内の例外のセットを処理できます。例外の後に例外が指定されていない場合は、デフォルトですべての例外が処理されます。各試行には、少なくとも 1 つの例外

#1 が必要です。例外クラスは、指定された例外のみを処理できます。例外が指定されていない場合、処理できません。

#举例
try:
    f=open('a.txt')
    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()
ログイン後にコピー

2、マルチブランチ

s1 = 'hello'
try:
    int(s1)
except IndexError as e: # 未捕获到异常,程序直接报错
    print e
ログイン後にコピー

3、汎用例外 Exception

s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
ログイン後にコピー

4、マルチブランチ +Exception

s1 = 'hello'
try:
    int(s1)
except Exception as e:
    print(e)
ログイン後にコピー

5、その他の例外メカニズム (try...finally 構文)

try. ..finally ステートメントは、例外が発生したかどうかに関係なく、最後のコードを実行します。構文は次のとおりです:

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)
ログイン後にコピー

例:

try:
<语句>
finally:
<语句>    #退出try时总会执行
raise
ログイン後にコピー

6、積極的に例外をトリガーします (raise ステートメント)

raise ステートメントを使用して、自分で例外をトリガーできます。構文形式は次のとおりです。

s1 = &#39;hello&#39;
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('无论异常与否,都会执行该模块,通常是进行清理工作')
ログイン後にコピー

ステートメント内の Exception は例外のタイプ (NameError など) であり、パラメーターは例外パラメーター値です。このパラメータはオプションです。指定しない場合、例外パラメータは「なし」になります。

最後のパラメータはオプションであり (実際にはほとんど使用されません)、存在する場合はトレース例外オブジェクトです。

例:

例外には、文字列、クラス、またはオブジェクトを指定できます。 Python カーネルによって提供される例外のほとんどは、クラスのインスタンスのパラメーターであるインスタンス化されたクラスです。

例外の定義は、次のように非常に簡単です。

raise [Exception [, args [, traceback]]]
ログイン後にコピー
def functionName( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行
ログイン後にコピー

7、カスタム例外

新しい例外クラスを作成することで、プログラムは独自の例外に名前を付けることができます。例外は通常、直接または間接的に Exception クラスから継承する必要があります。

以下は BaseException に関連する例です。この例ではクラスが作成されます。基本クラスは BaseException で、例外がトリガーされたときに詳細情報を出力するために使用されます。

try ステートメント ブロックでは、ユーザー定義の例外の後に、Except ブロック ステートメントが実行されます。変数 e は、Networkerror クラスのインスタンスの作成に使用されます。

try:
    raise TypeError(&#39;类型错误&#39;)
except Exception as e:
    print(e)
ログイン後にコピー

8, アサート: 条件をアサート

class Networkerror(BaseException):
    def __init__(self,msg):
        self.msg=msg
    def __str__(self):
        return self.msg
 
try:
    raise Networkerror(&#39;类型错误&#39;)
except Networkerror as e:
    print(e)
ログイン後にコピー
9, try...以外を要約

#1, 実際の作業からエラー処理を分離

#2、コードは整理しやすく、明確になり、複雑なタスクも簡単に実行できます。

3、より安全であることは間違いなく、次のような原因が発生することはありません。いくつかの小さな不注意によりプログラムが予期せずクラッシュしました

以上がPythonで例外を処理する方法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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