例外処理試行...例外
Pythonコードを書くとき、特定の理由の特定の分析のためにコードが間違っている場合があります。エラーを修正するために、エラーの理由を知る必要がある場合があります。
次の例は、Pythonのエラーを示しています
1.構文エラー
# 例1
if 2>1
print(2222)
# 例2
dic = {
"name";"alex"}
tu = (2,3,4''6)
# 错误提示:SyntaxError: invalid syntax
2.論理エラー
dic = {
"name":"海狗","age":18}
dic["hobby"]
# 错误提示:KeyError: 'hobby'
一般的に使用されるのは異常な判断を行う場合ですが、以下では例としてtryを使用します。
単一のブランチ:
try:
num = int(input(">>>")) #出现value错误之后,直接跳转except语句
print(111)
except ValueError:
print(666)
# >>>a
# 666
try:
dic = {
"name":"嘉欣"}
print(dic["age"])
num = int(input(">>>")) # 出现value错误之后,直接跳转except语句
print(111)
except ValueError:
print(666)
# KeyError: 'age'
try:
dic = {
"name":"嘉欣"}
print(dic["age"])
num = int(input(">>>")) # 出现value错误之后,直接跳转except语句
print(111)
except KeyError:
print(666)
# 666
複数のブランチ:
try:
num = int(input(">>>")) # 出现value错误之后,直接跳转except语句
dic = {
"name": "嘉欣"}
#print(dic["age"])
l1 = [1,2]
print(l1[100])
except ValueError:
print("输入的有非数字元素")
except KeyError:
print("没有此键")
except IndexError:
print("没有此下标")
print(666)
# >>>1233
# 没有此键
# 666
# >>>asd
# 输入的有非数字元素
# 666
# >>>123
# 没有此下标
# 666
1つの例外:
try:
dic = {
"name": "嘉欣"}
# print(dic["age"])
l1 = [1,2]
print(l1[100])
print(111)
for i in 123:
pass
except Exception as e: # Exception 会将错误报出来
print(e)
# 'age'
# list index out of range
# 'int' object is not iterable
マグナムを使用するのはいつですか?複数のブランチを使用するのはいつですか?
エラーメッセージを気にせず、エラーを排除してプログラムの実行を継続したい場合は、ユニバーサル例外を使用してください
しかし、一般的にコードを書いてください...すべての段落にtryを追加しないでください...それはそれについて心配していませんか?
マルチブランチプラスユニバーサル
def func():
pass
def func1():
pass
dic = {
1:func,
2:func1,
}
try:
num= int(input("请输入序号"))
dic[num]()
except ValueError:
print("请输入数字")
except KeyError:
print("请输入范围内的序号")
except Exception:
print("程序出现意料之外的错误....")
# 请输入序号456
# 请输入范围内的序号
# 请输入序号asfd
# 请输入数字
# 请输入序号1
最後に構造を試してみてください:
try:
dic = {
"name": "嘉欣"}
#print(dic["age"])
l1 = [1,2]
# print(l1[100])
print(111)
except ValueError:
print("输入的有非数字元素")
except KeyError:
print("没有此键")
else:
print("如果没有出现异常则执行这里")
finally:
print("finally 666")
# 没有此键
# finally 666
# finally 666
# IndexError: list index out of range
# 111
# 如果没有出现异常则执行这里
# finally 666
# 如果将except都注释掉
try:
dic = {
"name": "嘉欣"}
# print(dic["age"])
l1 = [1,2]
# print(l1[100])
print(111)
# except ValueError:
# print("输入的有非数字元素")
# except KeyError:
# print("没有此键")
# else:
# print("如果没有出现异常则执行这里")
finally:
print("finally 666")
# 111
# finally 666
例外はtryに依存する必要がありますelseはexceptに依存し、tryfinallyは
tryfinallyのみに依存する必要があります
:例外が発生する前に、finallyの実行を
使用してデータベース接続を閉じ、ファイルハンドルを閉じ、データを保存します。 、ついに使用されます
with open("teat1",encoding="utf-8",mode="a+") as f1:
try:
for i in f1:
print(i)
if ....:
finally:
f1.close()
# SyntaxError: invalid syntax
def func():
try:
print(111)
return 666
finally:
print(22)
print(func())
# 111
# 22
# 666
関数の戻りの終わりの前に、finallyコードを実行します
while 1:
try:
print(1)
break
finally:
print(222)
# 1
# 222
休憩する前に、最後にコードを実行します
例外をアクティブにトリガーします。
raise ValueError("出现了value错误")
# ValueError: 出现了value错误
アサーション:厳しい態度を示す
name = "1"
n1 = input("请输入:")
assert name == n1
print(111)
print(222)
# 请输入:as
# AssertionError
#请输入:1
# 111
# 222
カスタム例外:
Pythonで提供されるエラーには多くの種類がありますが、すべてのエラーではありません。一部のエラーでは、カスタマイズが必要です。
class LiYeError(BaseException):
def __init__(self,msg):
self.msg=msg
def __str__(self):
return self.msg
try:
raise LiYeError('类型错误')
except LiYeError as e:
print(e)
# 类型错误
上記、お役に立てれば幸いです〜