Python基础知识学习记录 2021——1202(try... except结构)

本文详细介绍了Python中的try...except异常处理结构,包括:try...一个except结构,try...多个except结构,try...except...else结构,以及try...except...finally结构,并通过示例代码解释了各种结构的使用场景和执行流程。

try… except结构

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

在这里插入图片描述
执行结果:

step1
step2
step4

try 语句块没有发生异常,则正常执行完 try 块后跳过 except 异常处理语句块,继续往下执行。

【示例】循环输入数字,如果不是数字则处理异常;直到输入 88,则结束循环。

while True:
    try:
        x = int(input("请输入一个数字:"))
        print("您入的数字是",x)
        if x==88:
            print("退出程序")
            break

    except:
        print("异常:输入的不是一个数字")

执行结构:

请输入一个数字:34
您入的数字是 34
请输入一个数字:asd
异常:输入的不是一个数字
请输入一个数字:sd
异常:输入的不是一个数字
请输入一个数字:1
88
您入的数字是 1
请输入一个数字:您入的数字是 88
退出程序

try…多个 except结构

上面的结构可以捕获所有的异常,工作中也很常见。但是,从经典理论考虑,一般建议尽量捕获可能出现的多个异常(按照先子类后父类的顺序),并且针对性的写出异常处理代码。为了避免遗漏可能出现的异常,可以在最后增加 BaseException
结构如下:

try:
被监控的、可能引发异常的语句块

except Exception1:
处理 Exception1 的语句块
except Exception2:
处理 Exception2 的语句块

except BaseException:
处理可能遗漏的异常的语句块

【示例】多个 except 结构

try:
    a = input("请输入被除数:")
    b = input("请输入除数:")
    c = float(a)/float(b)
    print(c)
except ZeroDivisionError:
    print("异常:除数不能为 0")
except TypeError:
    print("异常:除数和被除数都应该为数值类型")
except NameError:
    print("异常:变量不存在")
except BaseException as e:
    print(e)
    print(type(e))

执行结构:

请输入被除数:3
请输入除数:5
0.6
请输入被除数:9
请输入除数:0
异常:除数不能为 0

try…except…else 结构

try…except…else 结构增加了“else 块”。如果 try 块中没有抛出异常,则执行 else 块。如果try 块中抛出异常,则执行 except 块,不执行 else 块。

【示例】try…except…else 结构执行测试

try:
    a = input("请输入被除数:")
    b = input("请输入除数:")
    c = float(a)/float(b)

except BaseException as e:
    print(e)
else:
    print("除的结果是:",c)

print("程序结束!")

执行结果:
没有发生异常的执行情况(执行完 try 块后,执行 else):

请输入被除数:10
请输入除数:2
除的结果是: 5.0
程序结束!

发生异常的执行情况(执行 except 块,没有执行 else):

请输入被除数:5
请输入除数:0
float division by zero
程序结束!

try…except…finally 结构

try…except…finally 结构中,finally 块无论是否发生异常都会被执行;通常用来释放 try 块中申请的资源。

【示例】try…except…finally 结构简单测试

try:
    a = input("请输入一个被除数:")
    b = input("请输入一个除数:")
    c = float(a)/float(b)
except BaseException as e:
    print(e)
else:
    print(c)
finally:
    print("我是 finally 中的语句,无论发生异常与否,都执行!")
    print("程序结束!")

执行结果:

请输入一个被除数:0
请输入一个除数:1
0.0
我是 finally 中的语句,无论发生异常与否,都执行!
程序结束!

当报错异常时:

请输入一个被除数:10
请输入一个除数:0
float division by zero
我是 finally 中的语句,无论发生异常与否,都执行!
程序结束!

【示例】读取文件,finally 中保证关闭文件资源

try:
    f = open("d:/a.txt",'r')
    content = f.readline()
    print(content)
except BaseException as e:
    print(e)
finally:
    f.close() #释放资源。此处也可能会发生异常。若发生异常,则程序终止,不会继续往下执行
    print("step4")

执行结果:

abcdef
step4
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值