在Python中,处理异常通常使用`try-except`语句。以下是处理异常的基本步骤和结构:
try块
放置可能引发异常的代码。
except块
捕获特定类型的异常,并定义异常处理逻辑。
可以捕获多个异常类型,每个类型用逗号隔开。
else块(可选):
如果没有发生异常,则执行此代码块。
finally块(可选):
无论是否发生异常,都会执行此代码块。
示例代码
try:
可能会引发异常的代码
result = 10 / 0 这将引发 ZeroDivisionError
except ZeroDivisionError as e:
处理 ZeroDivisionError 异常
print(f"发生了除以零的错误:{e}")
except Exception as e:
处理其他类型的异常
print(f"发生了未知错误:{e}")
else:
如果没有异常发生,执行此代码块
print("计算成功")
finally:
无论是否发生异常,都会执行此代码块
print("异常处理结束")
自定义异常
如果需要,可以创建自定义异常类,继承自`Exception`类,并在需要时手动抛出:
class SexException(Exception):
def __init__(self, message="性别必须是'男'或'女'"):
self.message = message
super().__init__(self.message)
def set_sex(sex):
if sex not in ['男', '女']:
raise SexException()
try:
set_sex('未知') 这将引发 SexException
except SexException as e:
print(f"性别设置错误:{e}")
单元测试中的异常处理
在单元测试中,可以使用`unittest`模块的`assertRaises`方法来检查是否抛出了预期的异常:
import unittest
class TestDivision(unittest.TestCase):
def test_divide(self):
with self.assertRaises(ZeroDivisionError):
divide(10, 0)
if __name__ == '__main__':
unittest.main()
总结
使用`try-except`语句来捕获和处理异常。
可以捕获特定类型的异常,也可以捕获所有异常。
可以定义自定义异常类来表示程序中的特定错误情况。
在单元测试中使用`assertRaises`来验证异常是否按预期抛出。
希望这些信息能帮助你处理Python中的异常