1-错误处理
import logging try: print('try.......') r = 10/0 except ValueError as e: print('result:', e) except ZeroDivisionError as e: print('ZeroDivisionError:',e) logging.exception(e) #记录错误信息 else: print("no error!") finally: print("finally....") print('End')
Python所有的错误都是从BaseException类派生的,常见的错误类型和继承关系看这里:
https://docs.python.org/3/library/exceptions.html#exception-hierarchy
2-调试
2.1 抛出错误
class FooError(ValueError): pass def foo(s): n = int(s) if n==0: raise FooError('invalid value: %s' % s) #抛出异常 return 10 / n foo('0')
2.2 打印错误信息
#print()最大的坏处将来还得删除它 def foo1(s): n = int(s) assert n != 0, 'n is zero!' #assert断言 return 10 / n foo1('0') #调用: $ python -O err.py 用-O参数来关闭assert
import logging logging.basicConfig(level=logging.INFO) logging.info('hello word!!!!!') #记录信息 #级别,有debug,info,warning,error等几个级别
IDE
如果要比较爽地设置断点、单步执行,就需要一个支持调试功能的IDE。目前比较好的Python IDE有:
Visual Studio Code:https://code.visualstudio.com/,需要安装Python插件。
PyCharm:http://www.jetbrains.com/pycharm/
另外,Eclipse加上pydev插件也可以调试Python程序。
3-单元测试
import unittest 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)) def test_keyerror(self): d = Dict() with self.assertRaises(KeyError): #期待抛出指定类型的Error(KeyError) value = d['empty']
运行单元测试
$ python -m unittest mydict_test
或者
if __name__ == '__main__': unittest.main()
$ python mydict_test.py
4-文档注释
class Dict(dict): ''' Simple dict but also support access as x.y style. >>> d1 = Dict() >>> d1['x'] = 100 >>> d1.x 100 >>> d1.y = 200 >>> d1['y'] 200 >>> d2 = Dict(a=1, b=2, c='3') >>> d2.c '3' >>> d2['empty'] Traceback (most recent call last): ... KeyError: 'empty' >>> d2.empty Traceback (most recent call last): ... AttributeError: 'Dict' object has no attribute 'empty' '''