首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python异常处理机制、调试、测试

Python异常处理机制、调试、测试

作者头像
听着music睡
发布2018-11-23 18:02:44
5910
发布2018-11-23 18:02:44
举报
文章被收录于专栏:Android干货Android干货

类似于Java的try..catch..finally

Java的为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 , 如果没有则不走,最后不管代码有没有发送异常,都会执行finally里的代码

异常错误存在父子类问题,如果父类处理了,子类则不会再接收处理

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

调试

1、打印print

最简单的就是print 把数据打印出来再去找错误原因

问题在于会在代码中出现很多打印语句

2、断言assert

 assert n != 0, 'n is zero!'

assert的意思是,表达式n != 0应该是True,否则,根据程序运行的逻辑,后面的代码肯定会出错。

如果断言失败,assert语句本身就会抛出AssertionError

$ python err.py
Traceback (most recent call last):
  ...
AssertionError: n is zero!

注:

程序中如果到处充斥着assert,和print()相比也好不到哪去。不过,启动Python解释器时可以用-O参数来关闭assert

关闭后,你可以把所有的assert语句当成pass来看。

$ python -O err.py
Traceback (most recent call last):
  ...
ZeroDivisionError: division by zero

3、logging

logging的好处,它允许你指定记录信息的级别,有debuginfowarningerror等几个级别,当我们指定level=INFO时,logging.debug就不起作用了。同理,指定level=WARNING后,debuginfo就不起作用了。这样一来,你可以放心地输出不同级别的信息,也不用删除,最后统一控制输出哪个级别的信息。

logging的另一个好处是通过简单的配置,一条语句可以同时输出到不同的地方,比如console和文件。

import logging
logging.basicConfig(level=logging.INFO)

s = '0'
n = int(s)
logging.info('n = %d' % n)
print(10 / n)

--------------------------------------------
$ python err.py
INFO:root:n = 0
Traceback (most recent call last):
  File "err.py", line 8, in <module>
    print(10 / n)
ZeroDivisionError: division by zero
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-10-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档