在编写代码时,经常会出现语法错误,格式错误等等一系列错误;
如果我们不提前进行捕获的话就会被Python自动捕获出现红色报错;
加入我们知道可能会出现错,那么我们就可以进行一些异常处理:
这时就可以使用try-except语句:
try:
检测范围
except [expression [as identifier]]:
异常处理代码
try:
1 / 0
except:
print("错误")
try:
1 / 0
except ZeroDivisionError:
print("错误")
try:
50 + "asdasd"
except ZeroDivisionError:
print("错误")
同时 也可以使用多个 except,但是如果有多个错误,只会调转到其中一个错误,其他错误会忽略
try:
1 / 0
520 + "sdad"
except ZeroDivisionError:
print("除数不能0")
except ValueError:
print("值不正确")
except TypeError:
print("类型不正确")
异常处理的其他语法:
try–except–else
try:
1 / 0
except:
print("逮到了")
else:
print("没有逮到")
try:
1 / 1
except:
print("逮到了")
else:
print("没有逮到")
try–except–finally
try:
1 / 0
except:
print("逮到了")
else:
print("没逮到")
finally:
print("逮没逮到都会吱一声")
异常处理的嵌套:
try:
try:
520 + "sdad"
except:
print("内部异常")
except:
print("外部异常")
finally:
print("收尾工作")
try:
1 / 0
try:
520 + "sdad"
except:
print("内部异常")
except:
print("外部异常")
finally:
print("收尾工作")
raise语句:
我们可以使用raise语句直接进行异常报错,但是不可以对不存在的异常进行报错;
raise ValueError("值不正确")
异常链:
raise ValueError("不行") from ZeroDivisionError
assert语句:
与raise类似都是主动引发异常,但是assert只能引发一个叫做AsserttionError的异常;
a = "新年快乐"
assert a == "新年快乐"
assert a != "新年快乐"
利用异常实现goto:
try:
while True:
while True:
for x in range(10):
if x > 3:
raise
print(x)
except:
print("到这里来了")