错误处理
try
try...except...finally...
的错误处理机制- 如果发生了不同类型的错误,应该由不同的
except
语句块处理,多个except
来捕获不同类型的错误 Python的错误其实也是class,所有的错误类型都继承自
BaseException
,不但捕获该类型的错误,还把其子类的错误也一网打尽调用栈
出错的时候,一定要分析错误的调用栈信息,才能定位错误的位置
记录错误
Python内置的
logging
模块logging.exception(e)
可以非常容易地记录错误信息抛出错误
根据需要,可以定义一个错误的class,选择好继承关系后用
raise
语句抛出一个错误的实例raise
语句如果不带参数,就会把当前错误原样抛出;在except
中raise
一个Error可以把一种类型的错误转化成另一种类型错误处理
print
用
print()
最大的坏处是将来还得删掉它,运行结果会包含很多垃圾信息断言
凡是用
print()
来辅助查看的地方,都可以用断言(assert)来替代启动Python解释器时可以用
-O
参数来关闭assert
logging
logging
允许指定记录信息的级别,有debug
、info
、warning
、error
等几个级别,一条语句可以同时输出到console和文件等不同的地方pdb
启动Python的调试器pdb,让程序以单步方式运行可以随时查看运行状态
import pdb
后,然后在可能出错的地方放一个pdb.set_trace()
就可以设置一个断点,可以用命令p
查看变量,或用命令c
继续运行单元测试
单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作
- 编写单元测试需要引入Python自带的
unittest
模块 ```python import unittest
from mydict import Dict
class TestDict(unittest.TestCase):
def test_init(self):
d = Dict(a=1, b='test')
self.assertEqual(d.a, 1)
self.assertEqual(d.b, 'test')
self.assertTrue(isinstance(d, dict))
```