# printTest.py def foo(s): n = int(s) print('>>> n = %d' % n) return 10 / n def main(): foo('0') main() 复制代码 (venv) E:\pyplace\learn_python3\learn\two\调试>python printTest.py >>> n = 0 Traceback (most recent call last): File "printTest.py", line 9, in <module> ... ZeroDivisionError: division by zero
# assert.py def foo(s): n = int(s) assert n != 0, 'n is zero!' return 10 / n def main(): foo('0') main() 复制代码 E:\py\venv\Scripts\python.exe E:/pyplace/learn_python3/learn/two/调试/assert.py Traceback (most recent call last): ... assert n != 0, 'n is zero!' AssertionError: n is zero!
asset 的意思是,表达式 n != 0 应该是 true 。否则后面的代码会出错 如果断言失败,assert 就会抛出 AssertionErrot
注意:
-
assert 和 print()相比较好不到哪里去,一样在代码中会出现太多,并且输出结果垃圾信息多
-
不过 assert 可以使用 -O 参数来关闭 assert(大写的O,不是零)
和 assert比较,不仅可以抛出错误,还可以输出到文件
#loggingTest.py import logging logging.basicConfig(level= logging.INFO) # 注意一定要写这个,不然就不会输出信息 s = '0' n = int(s) logging.info('n = %d' % n) print(10 / n) 复制代码 E:\py\venv\Scripts\python.exe E:/pyplace/learn_python3/learn/two/调试/loggingTest.py INFO:root:n = 0 Traceback (most recent call last): File "E:/pyplace/learn_python3/learn/two/调试/loggingTest.py", line 7, in <module> print(10 / n) ZeroDivisionError: division by zero
提示
-
logging 的好处,可以指定信息的级别(debug, info, warning, error 等)
-
当我们指定 level = INFO 时, logging.debug 就不起作用,也就是只能一个等级起作用。
-
loggging 的另外一个好处,通过简单的配置,可以同时输出到 console 和 文件