try_except基本结构
原创...大约 3 分钟
try...一个 except 结构
try...except
是最常见的异常处理结构。结构如下:
try:
被监控的可能引发异常的语句块
except BaseException [as e]:
异常处理语句块
try 块包含着可能引发异常的代码,except 块则用来捕捉和处理发生的异常。
执行的时候,如果 try 块中没有引发异常,则跳过 ecept 块继续执行后续代码;
执行的时候,如果 try 块中发生了异常,则跳过 try 块中的后续代码,跳到相应的 except 块中处理异常;异常处理完后,继续执行后续代码。
测试简单的 0 不能做除数异常
try:
print("step1")
a = 3 / 0
print("step2")
except BaseException as e:
print("step3")
print(e)
print("step4")
执行结果为: step1 、 step3 、 division by zero 、 step4
循环输入数字,如果不是数字则处理异常;直到输入 88,则结束循环。
while True:
try:
x = int(input("请输入一个数字:"))
print("您入的数字是", x)
if x == 88:
print("退出程序")
break
except:
print("异常:输入的不是一个数字")
try...多个 except 结构
上面的结构可以捕获所有的异常,工作中也很常见。但是,从经典理论考虑,一般建议尽量捕获可能出现的多个异常(按照先子类后父类的顺序),并且针对性的写出异常处理代码。为了避免遗漏可能出现的异常,可以在最后增加 BaseException。结构如下:
try:
被监控的、可能引发异常的语句块
except Exception1:
处理Exception1的语句块
except Exception2:
处理Exception2的语句块
...
except BaseException:
处理可能遗漏的异常的语句块
try:
a = input("请输入被除数:")
b = input("请输入除数:")
c = float(a) / float(b)
print(c)
except ZeroDivisionError:
print("异常:除数不能为0")
except TypeError:
print("异常:除数和被除数都应该为数值类型")
except BaseException as e:
print(e)
print(type(e))
try...except...else 结构
try...except...else
结构增加了else
块。如果try
块中没有抛出异常,则执行else
块。如果try
块中抛出异常,则执行except
块,不执行else
块。
try:
a = input("请输入被除数:")
b = input("请输入除数:")
c = float(a) / float(b)
except BaseException as e:
print(e)
else:
print("除的结果是:", c)
如上代码,发生异常执行 except 块,没有异常执行 else
try...except...finally 结构
try...except...finally
结构中,finally
块无论是否发生异常都会被执行;通常用来释放try
块中申请的资源。
try:
a = input("请输入一个被除数:")
b = input("请输入一个除数:")
c = float(a) / float(b)
except BaseException as e:
print(e)
else:
print(c)
finally:
print("我是finally中的语句,无论发生异常与否,都执行!")
print("程序结束!")
读取文件,finally
中保证关闭文件资源
try:
f = open("d:/a.txt", "r")
content = f.readline()
print(content)
except BaseException as e:
print(e)
finally:
f.close() # 释放资源。此处也可能会发生异常。若发生异常,则程序终止,不会继续往下执行
print("step4")
Powered by Waline v2.15.7