Python基础之七异常与调试

来源:互联网 发布:淘宝洗衣液假货多吗 编辑:程序博客网 时间:2024/06/06 05:18
'''    try'''from asyncio.test_utils import TestCasetry:    print('try...')    r = 20 / 0    print('result:', r)except ZeroDivisionError as e:    print('except:', e)finally:    print('finally...')print('END')try:    print('try...')    r = 20 / int('a')    print('result:', r)except ValueError as e:    print('ValueError', e)finally:    print('finally...')print('END')'''    调用堆栈        如果错误没有被捕捉,它就会一直向上抛,最后被Python解释器步骤,打印一个错误信息然后退出'''def foo(s):    return 10 / int(s)def bar(s):    return foo(s) * 2def main():    bar('0')#print(main())'''    记录错误        logging'''import loggingdef foo(s):    return 0 / int(s)def bar(s):    return foo(s) * 2def main():    try:        bar(0)    except Exception as e:        logging.exception(e)#print(main())'''    抛出错误          因为错误是class, 捕获一个错误就是捕获到该class的一个实例。因此, 错误不是凭空产生的而是有意创建并抛出的。        Python的内置函数会抛出很多类型的错误,我们自己编写也可以抛出错误          如果要抛出错误,首先根据需要们可以定义一个错误的class, 选择好继承关系,然后,用raise语句抛出一个错误实例'''class FooError(ValueError):    passdef foo(s):    n = int(s)    if n == 0:        raise FooError('invalid value: %s' % s)    return 10 / n#print(foo('0'))'''    调试        print()方法打印    断言        assert    logging    IDE断点调试'''def foo(s):    n = int(s)    assert n != 0, 'n is zero!'#True    return 10 / ndef main():     foo('0')#print(main())import loggings = '0'n = int(s)logging.info('s = %d' % n)#print(10 / n)'''    单元测试        测试方法必须为test开头        setUp()和tearDown()方法会在测试的时候前后调用(例如测试数据库打开关闭)                                    小结    单元测试可以有效测试某个程序莫阔的行为,是未来重构代码的信息保证    单元测试的测试用例要覆盖常用的输入组合,边界条件和异常    单元测试代码要非常简单,如果测试代码复杂,那么测试代码本身就可能存在bug    单元测试通过了并不意味着程序没有bug了,但是不通过一定是有bug'''class Dict(dict):    def __init__(self, **kw):        super().__init__(**kw)    def __getattr__(self, key):        try:            return self[key]        except KeyError:            raise AttributeError(r"'Dict' object hs no attribute '%s'" % key)        def __setattr__(self, key, value):            self[key] = valueimport  unittestclass 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_key(self):        d = Dict()        d['key'] = 'value'        self.assertEqual(d.key, 'value')    def test_attr(self):        d = Dict()        d.key = 'value'        self.assertTrue('key' in d)        self.assertEqual(d['key'], 'value')    def setUp(self):        print('setUp...')    def tearDown(self):        print('tearDown...')

更多精彩内容访问个人站点www.gaocaishun.cn

0 0