错误处理
python
有一套 try...except...finally...
来处理错误,相当于Java
的异常,finally
最终,都会执行
# 错误处理
try:
print('try...')
r = 10 / 0
print('result:', r)
except ZeroDivisionError as e:
print('except:', e)
finally:
print('finally...')
print('END')
def foo(s):
n = int(s)
if n==0:
raise ValueError('invalid value: %s' % s)
return 10 / n
def bar():
try:
foo('0')
except ValueError as e:
print('ValueError!')
raise #这种是抛出原异常
调试
日志打印
- 使用
print
打印变量信息 - 使用
assert
,增加安全判断 - 使用
logging
,输出错误到文件 python -O err.py
关闭断言assert
logging
的另一个好处是通过简单的配置,一条语句可以同时输出到不同的地方,比如console
和文件。
import logging
def foo(s):
n = int(s)
assert n != 0, 'n is zero!' #当前面条件不成立时,抛出错误信息
return 10 / n
#设置logging等级
logging.basicConfig(level=logging.INFO)
pdb
单步调试:
python -m pdb xxx.py
进入pdb
在pdb
环境中,
n
下一步
p s
打印变量值s
指定位置调试:
在文件中加, pdb.set_trace()
程序会自动在pdb.set_trace()
暂停并进入pdb
调试环境,可以用命令p
查看变量,或者用命令c
继续运行
单元测试
- 需要引入
unittest
模块。测试类,从unittest.TestCase
继承 - 测试方法,要以
test
开头 - 几个断言方法。
self.assertEqual(abs(-1), 1) # 断言函数返回的结果与1相等
self.assertTrue(isinstance(d, dict)) #断言结果为true
with self.assertRaises(KeyError): #断言抛出错误
value = d['empty']
# 运行单元测试
# 方法一:
if __name__ == '__main__':
unittest.main()
# 方法二:
python -m unittest mydict_test