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继续运行

 

posted @ 2018-01-10 13:27  枫叶布  阅读(896)  评论(0编辑  收藏  举报