python 高级用法 -- 错误、调试和测试
Prerequisite#
参考文章:廖雪峰的文章
常用异常(中文分析):Python 异常处理
错误处理#
常见写法(以处理全部异常 Exception,与断言语句失败 AssertionError 为例)
# 处理全部异常
try:
a = '2' + 2
except Exception as e:
print(e)
# 不追踪错误写法
# finally 语句写不写都行,但写了一定会执行
def function():
try:
a = 100
assert a == 10
except AssertionError as e:
print("断言语句异常")
finally:
print("End")
function()
"""
断言语句异常
End
"""
# 追踪错误写法
def function():
try:
a = 100
assert a == 10
except:
raise AssertionError("断言语句异常") from None
finally:
print("End")
function()
"""
Traceback (most recent call last):
File "C:\Users\WPS\Desktop\Temporary\test.py", line 19, in <module>
function()
File "C:\Users\WPS\Desktop\Temporary\test.py", line 15, in function
raise AssertionError("断言语句异常")
AssertionError: 断言语句异常
"""
更多规则
# 捕获多个异常
try:
print('try...')
r = 10 / int('2')
print('result:', r)
except ValueError as e:
print('ValueError:', e)
except ZeroDivisionError as e:
print('ZeroDivisionError:', e)
# 如果没有错误发生
else:
print('no error!')
finally:
print('finally...')
print('END')
调试#
方法有 print、assert、logging、pdb、IDE 等,但我只用 logging
import logging
logging.basicConfig(level=logging.DEBUG)
s = '0'
n = int(s)
logging.debug('n = %d' % n)
print(10 / n)
"""
DEBUG:root:n = 0
Traceback (most recent call last):
File "c:\Users\WPS\Desktop\Temporary\test.py", line 80, in <module>
print(10 / n)
ZeroDivisionError: division by zero
"""
# 注意除了打印报错信息,n 也打印出来了
# 如果开头 logging 的配置换成如下
logging.basicConfig(level=logging.INFO)
# 那么就不会打印出 n 了
可替换的地方有开头 level=logging.DEBUG
和报错语句 logging.debug()
显示报错的等级为:debug < info < warning < error
选定开头的报错等级,那么报错语句在这个等级以下的,都会显示报错(如果语句报错了)
单元测试#
基本是测试 python 代码的,使用到了 unittest 模块,内置许多用于测试的函数,如 assertEqual 检验是否相等、assertRaises 检验是否抛出相同异常
我觉得用不到,就不写了
文档测试#
讲的是写文档时注释放的是代码执行示例, 如果要执行的化可以用 doctest 模块
用不到 +2,也不写了
作者: 筱团
出处:https://www.cnblogs.com/CourserLi/p/16525053.html
本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了