python异常捕获语句

Python程序在运行时检测到异常会直接崩溃,这种系统默认的异常处理方式并不友好。不过Python既可以直接通过try-except语句实现简单的异常捕获与处理的功能,也可以将try-except语句与else或finally子句组合,从而实现更强大的异常捕获与处理的功能。

使用try-except语句捕获异常:

语法格式如下:

try:

可能出错的代码 #需要被监控的代码

except [异常类型[as error]]: #将捕获到的异常对象赋值给error

捕获异常后的处理代码

异常类型名字(内部定义)不同于变量,不需要对他增加字符串表示

以上格式中,try子句之后为可能出错的代码,也就是需要被监控的代码;

except子句中可以指定异常类型,若指定了异常类型,该子句只对与指定异常类型相匹配的异常进行处理,如果没有指定异常类型,则处理try语句捕获的所有异常。except子句中的as关键字用于将捕获到的异常对象赋值给error

except子句后的代码是处理异常时执行的代码

try-except语句的执行过程为:

优先执行try子句中可能出错的代码。如果try子句中没有出现异常,忽略except子句继续向下执行;若try子句中出现异常,忽略try子句的剩余代码。转而执行except语句:若程序出现的异常类型与except子句中指定的异常类型匹配,使用error记录异常异常信息,执行except子句中的代码,否则按系统默认的方式终止程序。

捕获单个异常:

示例一:

try:
    num_one = int(input("请输入整数:"))
    num_two = int(input("请输入除数"))
    print("结果为",num_one/num_two)
except :
    print("出错了")

在该代码中,try字句在第三行才出现错误,所以我们在识别到第三行出现错误后停止执行try语句,转而执行except子句,因为except没有指定异常类型,所以处理try语句捕获的所有异常类型。

运行界面如下: 

示例二:

try:
    num_one = int(input("请输入整数:"))
    num_two = int(input("请输入除数"))
    print("结果为",num_one/num_two)
except :
    print("出错了")

运行界面如下: 

如果在执行try语句时,煤油出现异常,则忽略except语句,直接输出即可。

示例三:

try:
    num_one = int(input("请输入整数:"))
    num_two = int(input("请输入除数"))
    print("结果为",num_one/num_two)
except ZeroDivisionError:
    print("出错了")

在except子句里面,可以指定异常类型

运行界面:

示例四:

try:
    num_one = int(input("请输入整数:"))
    num_two = int(input("请输入除数"))
    print("结果为",num_one/num_two)
except ZeroDivisionError as error:
    print("出错了,原因:",error)

通过except子句里面的as error:我们可以得知出错的具体原因

运行界面如下: 

捕获多个异常:

捕获多个异常需要在except之后以元组(与列表的作用类似,可以保存任意数量、任意类型的元素,但不可以被修改,Python中使用“()”创建元组,元组中的元素以逗号分割)的形式指定多个异常类型

示例代码如下:

try:
    num_one = int(input("请输入被除数:"))
    num_two = int(input("请输入除数"))
    print("结果为",num_one/num_two)
except (ZeroDivisionError,ValueError) as error:
    print("出错了,原因:",error)

运行界面如下:

捕获ZeroDivisionError异常:

捕获ValueError异常:

 捕获全部异常:

如果要捕获程序中所有的异常,那么可以将except之后的异常类型设置为Exception或省略不写,如果异常类型省略不写的话,无法获取异常的具体信息。

示例代码如下:

try:
    num_one = int(input("请输入被除数:"))
    num_two = int(input("请输入除数"))
    print("结果为",num_one/num_two)
except Exception as error:
    print("出错了,原因:",error)
    

运行界面如下: 

 异常结构中的else子句:

else子句可以与try-except语句组合成try-except-else结构,若try监控的代码没有异常,程序会直接跳过except语句,执行else子句后的代码。

try-except-else语法格式如下:

try:

可能出错的代码

except [异常类型[as error]]

捕获异常后的处理代码

else:

没有异常的处理代码

示例如下:

try:
    num_one = int(input("请输入被除数:"))
    num_two = int(input("请输入除数"))
    res=num_one/num_two
except ZeroDivisionError as error:
    print("出错了,原因:",error)
else:
    print(res)

运行界面如下所示: 

 异常结构中的finally子句:

finally子句可以与try-except一起使用,语法格式如下:

try:

可能出错的代码

except [异常类型[as error]]   #将捕获到的异常对象赋值给error

捕获异常后的处理代码

finally:

一定执行的代码

无论try子句监控的代码是否产生异常,finally子句都会被执行,基于此特性,在实际应用程序中,finally子句多用于预设资源的清理操作,如关闭文件、关闭网络连接、关闭数据库连接等。

代码示例如下:

try:
    test= open('./test.py',mode='r',encoding='utf-8')
    print(test.read())
except FileExistsError  as  error:
    print(error)
finally:
    test.close()
    print('文件已关闭')

运行界面: 

在执行过程中,finally与前面的语句执行没有关系,是一定会执行的语句,不受前面语句的执行效果。

同时,也可将这些语句放到一起,语法格式如下:

try:

<语句块1>

except<异常类型>:

<语句块2>

else:对应语句块3在不发生异常时执行

<语句块3>

finally:对应语句块4一定执行(无论是否发生异常)

<语句块4>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直再追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值