在Python中,处理异常主要通过try - except语句块来实现,以下是详细介绍及示例:
基本的 try - except 结构
try:
# 可能会引发异常的代码
result = 10 / 0
print(result)
except ZeroDivisionError:
# 捕获到ZeroDivisionError异常时执行的代码
print("不能除以零")
在上述代码中,try块内的10 / 0会引发ZeroDivisionError异常。当异常发生时,程序会跳转到对应的except块执行其中的代码。
捕获多种异常
可以在一个try块后跟随多个except块来捕获不同类型的异常。
try:
num = int('abc')
result = 10 / num
print(result)
except ValueError:
print("将字符串转换为数字失败")
except ZeroDivisionError:
print("不能除以零")
这里,int('abc')会引发ValueError异常,而如果num为0,10 / num会引发ZeroDivisionError异常。程序会根据实际引发的异常类型执行相应的except块。
使用一个 except 捕获多种异常类型
try:
num = int('abc')
result = 10 / num
print(result)
except (ValueError, ZeroDivisionError):
print("发生了值错误或者除零错误")
上述代码通过在括号内列出多个异常类型,使用一个except块捕获多种异常。
else 子句
try - except结构还可以包含else子句,当try块中没有引发异常时,会执行else子句中的代码。
try:
num = 5
result = 10 / num
except ZeroDivisionError:
print("不能除以零")
else:
print("计算结果:", result)
在这个例子中,如果try块中的除法运算成功(没有引发ZeroDivisionError),就会执行else块。
finally 子句
finally子句无论try块中是否发生异常,都会被执行。
try:
num = 5
result = 10 / num
except ZeroDivisionError:
print("不能除以零")
else:
print("计算结果:", result)
finally:
print("无论是否有异常,我都会被执行")
finally子句常被用于资源清理,例如关闭文件、数据库连接等操作,确保这些操作一定会被执行。
自定义异常
你也可以创建自己的异常类,通常继承自内置的Exception类。
class MyCustomError(Exception):
pass
try:
raise MyCustomError("这是我自定义的异常")
except MyCustomError as e:
print(f"捕获到自定义异常: {e}")
在上述代码中,定义了一个MyCustomError异常类,并在try块中手动引发该异常,然后在except块中捕获并处理它。