python异常处理包括两种
- try...exept
对于try下面的代码块,发生异常后
对比,except定义的异常,如果一致,则执行except下面的代码块
代码示例
# 异常处理,try...except
# 异常抓捕
try:
a = int(input('输入被除数'))
b = int(input('输入除数'))
c = a / b
print(f'被除数{a},除以,除数{b}={c}')
except (ValueError,):# 异常处理,输入的内容转换int有问题,会执行此处的内容
print('数字格式异常')
except ArithmeticError:# 异常处理,除数为0,执行此处内容
print('除数不能为0')
except:
print('未知异常')
print('程序继续执行')
- pytest.raises()
代码示例
# 异常处理,pytest.raise()
import pytest
# b已知异常,捕获后可继续执行
def test_raise_case1():
with pytest.raises((ValueError,ZeroDivisionError)):
x = int('2f')
d = 0
c = x/d
print(c)
print('捕获异常后继续执行')
# 不知道预期异常,用match raise自定义异常
def case1(x):
if x == 0:
raise ValueError("value not 0 or None")
return 2/x
def test_raise_case2():
# match 可以用政策匹配
with pytest.raises(ValueError,match=r'value not \d+$'):
case1(0)
assert eval('1+2') == 3
# 获得异常信息,用于断言
def test_raise_case3():
with pytest.raises(ValueError) as exec_info:
case1(0)
print(f'exec_info.type={exec_info.type}')
print(f'exec_info.value.args={exec_info.value.args}')
assert exec_info.type == ValueError
assert exec_info.value.args[0] == 'value not 0 or None'