zoukankan      html  css  js  c++  java
  • Python错误处理和调试

    错误处理(try...except...finally...

    try:
        print('try...')
        r = 10 / 0
        print('result:', r)
    except ZeroDivisionError as e:
        print('except:', e)
    finally:
        print('finally...')
    print('END')
    
    # try...
    # except: division by zero
    # finally...
    # END
    
    # 可以使用多个except来捕捉不同的错误信息,finally不管是否报错都一定会执行

    调试

    • print()
    def foo(s):
        n = int(s)
        print('>>> n = %d' % n)
        return 10 / n
    # 用print()最大的坏处是将来还得删掉它
    • 断言(assert)(凡是用print()来辅助查看的地方,都可以用断言(assert)来替代)
    def foo(s):
        n = int(s)
        assert n != 0, 'n is zero!'
        return 10 / n
    #assert的意思是,表达式n != 0应该是True。否则抛出AssertionError:‘n is zero’
    • logging(logging不会抛出错误,而且可以输出到文件)
    import logging
    logging.basicConfig(level=logging.INFO)
    
    s = '0'
    n = int(s)
    logging.info('n = %d' % n)
    print(10 / n)
    • pdb(启动Python的调试器pdb)
    $ python -m pdb err.py
    输入命令l来查看代码
    输入命令n可以单步执行代码
    任何时候都可以输入命令p 变量名来查看变量
    输入命令q结束调试,退出程序
    • pdb.set_trace()(可能出错的地方放一个pdb.set_trace(),就可以设置一个断点)
    import pdb
    
    s = '0'
    n = int(s)
    pdb.set_trace() # 运行到这里会自动暂停
    print(10 / n)
    # 程序会自动在pdb.set_trace()暂停并进入pdb调试环境,可以用命令p查看变量,或者用命令c继续运行
  • 相关阅读:
    桶排序
    向控件添加变量之后,类中多了什么?
    atan2&sin
    Bug(1)
    十六进制转化二进制[c]
    接口性能分析与优化
    记一次内存泄漏DUMP分析
    偏移二分查找
    iOS开发——自定义密码输入键盘
    iOS开发——手机号,密码,邮箱,身份证号,中文判断
  • 原文地址:https://www.cnblogs.com/sghy/p/8258051.html
Copyright © 2011-2022 走看看