[Python3] try except else finally
3763 ワード
例外処理
Python 3は、try except
構文を使用して異常を処理することができる.
似たような文法を持つ言語もたくさんあります.
Java、JavaScript、C++、phpなどの言語はtry catch
文法をサポートしています.
Python 3のtry except finally
は、他の言語のtry catch finally
とほぼ同じです.sample = {"key1": 1}
try:
value2 = sample["key2"]
print("try here")
except KeyError:
value2 = 0
print("Error!")
finally:
print("FINALLY!")
print("After handler")
#出力
Error!
FINALLY!
After handler
Python 3のtry except finally
はこのような構造である.
簡単です.
sample = {"key1": 1}
try:
value2 = sample["key2"]
print("try here")
except KeyError:
value2 = 0
print("Error!")
finally:
print("FINALLY!")
print("After handler")
try
文からsample
辞書に存在しない鍵にアクセスします.KeyError
が発生したので、KeyError
を制御するexcept
ゲートに移動した.その後、最後に
finally
文を実行し、プロセスを続行します.差異 else
ゲートです.
△Pythonではelse
ゲートがあちこちで使われているようです.先週、for
ゲートもelse
ゲートが使えることを知りましたが...)sample = {"key1": 1}
try:
value1 = sample["key1"]
print("try here")
except KeyError:
value2 = 0
print("Error!")
else:
print("value2 assigned!")
finally:
print("FINALLY!")
print("After handler")
#出力
try here!
value2 assigned!
FINALLY!
After handler
コードを少し修正しました.else
ゲートはtry
ゲートでエラーが発生しましたが、例外が発生しない場合にのみアクセスできます.
しかし、else
ドアはexcept
ドアがないわけにはいかない.try:
print("hello")
else:
print("world")
そうは書けないtry except
ゲートを処理すればいいのに、なぜelse
ゲートがあるのですか?
what 'else'??
1.可読性、明確性
水道コードを作ります.get_data()
という関数にデータをインポートします.
これは,parse()
という関数で導入されたデータをグループ化する作業である.
この場合、get_data()
関数に異常が発生する可能性があると仮定します.try:
my_data = get_data()
parsed_data = parse(my_data)
except:
parsed_data = None
return parsed_data
さらにelse
句を加えます.try:
my_data = get_data()
except:
parsed_data = None
else:
parsed_data = parse(my_data)
return parsed_data
else
ゲートは、どのような態様で例外処理を行うべきかを明確に知ることができる.
2.意図的に異常処理を行わない
Python3 tutorial - Exception handlingを参照してください.
The use of the else clause is better than adding additional code to the try clause because it avoids accidentally catching an exception that wasn’t raised by the code being protected by the try … except statement.
先ほどのサンプルコードを再利用しましょう.
しかし、ここでは、get_data()
とparse()
の両方の関数がIOError
を生成できると仮定する.try:
my_data = get_data()
parsed_data = parse(my_data)
except IOError:
parsed_data = None
return parsed_data
get_data()
およびparse()
で起こり得るIOError
を処理することができる.parse()
で発生した例外を処理したくないなら?
その時はelse
を使います.try:
my_data = get_data()
except IOError:
parsed_data = None
else:
parsed_data = parse(my_data)
return parsed_data
次のように、parsed_data = parse(my_data)
を異常処理文から直接取り出せばいいのではないでしょうか.try:
my_data = get_data()
except IOError:
parsed_data = None
parsed_data = parse(my_data)
return parsed_data
異常が発生した場合、my_data
は未定義の名前であるため、NameError
が発生する.
Reference
この問題について([Python3] try except else finally), 我々は、より多くの情報をここで見つけました
https://velog.io/@fregataa/Python3-try-except-else-finally
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
sample = {"key1": 1}
try:
value1 = sample["key1"]
print("try here")
except KeyError:
value2 = 0
print("Error!")
else:
print("value2 assigned!")
finally:
print("FINALLY!")
print("After handler")
try:
print("hello")
else:
print("world")
try:
my_data = get_data()
parsed_data = parse(my_data)
except:
parsed_data = None
return parsed_data
try:
my_data = get_data()
except:
parsed_data = None
else:
parsed_data = parse(my_data)
return parsed_data
try:
my_data = get_data()
parsed_data = parse(my_data)
except IOError:
parsed_data = None
return parsed_data
try:
my_data = get_data()
except IOError:
parsed_data = None
else:
parsed_data = parse(my_data)
return parsed_data
try:
my_data = get_data()
except IOError:
parsed_data = None
parsed_data = parse(my_data)
return parsed_data
Reference
この問題について([Python3] try except else finally), 我々は、より多くの情報をここで見つけました https://velog.io/@fregataa/Python3-try-except-else-finallyテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol