一.什么是异常
一切影响程序执行(报错)或者影响结果(不报错)的都可以视为异常
python中有被称为‘异常’的对象处理这个问题
二.常见的异常
- SyntaxError(语法错误):该错误是自己粗心导致的,如写入中文符号;
- TypeError(类型错误):数据类型不同时进行操作,或者修改不可改变的值
- AttributeError(属性错误):写错属性名,或者根本没有这个属性
- IndexError:出现于索引越界时;
- KeyError:键不存在时;
- ValueError:出现于传入无效的参数时;
- NameError:未声明、初始化对象。
三.处理异常
使用try - except 代码,不用于基础语法异常的捕获,通常捕获的是你/程序无法控制的部分。 我们都知道分子不能为零,我们就让他为零试一下
a = 5
b = 0
print(a / b)
运行后报错 ZeroDivisionError: division by zero。此时我们处理一下这个异常
a = 5
b = 0
try:
print(a / b)
except :
print('错误,分子不能为零')
- try:先执行内部代码测试,成功就执行
- except:try失败了,就执行except,并写我们可以在except后面指定错误类型
- try不会单独存在,至少有一个except 或者finally
四.异常处理完整结构(包括可选结构)
try:
正常执行的程序
except a:
第一种异常处理方法
except b:
第二种异常处理方法
except:
第三种异常处理方法:
else:
正常执行了try之后,需要执行的代码
finally:
无论什么情况都会执行
五.具体用法
5.1用于获取异常信息
希望看到有什么错误
a = 5
b = 0
try:
print(a / b)
except Exception as e:
print('错误信息' ,e)
Exception是所有错误的基类
5.2捕获指定异常
> a = 5
b = 0
try:
print(a / b)
except ZeroDivisionError:
print('错误,分子不能为零')
六.处理不可见的异常——单元测试
所谓不可见的异常,就是指程序的结果与预期结果不一样,不会报错。 这时候我们可以进行单元测试,标准包——unittest
1. 测试用例:要测试的代码(TestCase) -->
2. 测试用例加载器(TestLoader)-->
3. 测试用例套件(TestSuite)-->
4. 执行器(TestRunner)-->
5. 输出结果
a = 1 == 1
b = 2 == 1
上述情况我们需要if,else做具体判断才能给用户比对的结果 但是在单元测试中,我们用一个新的命令——断言(assert)
assert 1 == 1
assert 1 != 1
import unittest
def add():
return 1 + 1
def multi():
return 1 * 1
class MyTest(unittest.TestCase):
def setUp(self):
print('测试启动')
def test_add(self):
self.assertEqual(add(), 1, '加法计算错误')
def test_multi(self):
self.assertEqual(multi(), 1, '乘法法计算错误')
def tearDownDown(self):
print('测试结束')
if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(MyTest('test_add'))
suite.addTest(MyTest('test_multi'))
runner = unittest.TextTestRunner()
runner.run(suite)
断言参考表
|