• 代码查错方法总结


    1、使用正常的 print()进行输出:

    # printTest.py
    
    
    def foo(s):
        n = int(s)
        print('>>> n = %d' % n)
        return 10 / n
    
    def main():
        foo('0')
    
    main()
    复制代码
    (venv) E:pyplacelearn_python3learn	wo调试>python printTest.py
    >>> n = 0
    Traceback (most recent call last):
      File "printTest.py", line 9, in <module>
       ...
    ZeroDivisionError: division by zero

    用 print() 不好的地方就是,程序中到处都是 print(),运行结果也包含很多垃圾信息

     

    2、使用断言:

    # assert.py
    
    
    def foo(s):
        n = int(s)
        assert n != 0, 'n is zero!'
        return 10 / n
    
    def main():
        foo('0')
    
    main()
    复制代码
    E:pyvenvScriptspython.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

    注意:

    1. assert 和 print()相比较好不到哪里去,一样在代码中会出现太多,并且输出结果垃圾信息多

    2. 不过 assert 可以使用 -O 参数来关闭 assert(大写的O,不是零)

    3、使用logging(把 print() 替换为 logging 是第3种方式):

    和 assert比较,不仅可以抛出错误,还可以输出到文件

    #loggingTest.py
    
    import logging
    
    logging.basicConfig(level= logging.INFO)  #  注意一定要写这个,不然就不会输出信息
    s = '0'
    n = int(s)
    logging.info('n = %d' % n)
    print(10 / n)
    复制代码
    E:pyvenvScriptspython.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.basicConfig(level= logging.INFO) # 注意一定要写这个,不然就不会输出 INFO 信息

     

    提示

    1. logging 的好处,可以指定信息的级别(debug, info, warning, error 等)

    2. 当我们指定 level = INFO 时, logging.debug 就不起作用,也就是只能一个等级起作用。

    3. loggging 的另外一个好处,通过简单的配置,可以同时输出到 console 和 文件

  • 相关阅读:
    数据的图表统计highcharts
    spring文件的上传和下载
    项目随笔@Service("testService")-------第二篇
    spring的四种数据源配置
    spring之interceptor篇
    spring过滤器篇
    SecurityManager篇
    Apache shiro篇
    日期工具方法
    定时器CronExpression配置说明详解
  • 原文地址:https://www.cnblogs.com/zzy-9318/p/10022696.html
Copyright © 2020-2023  润新知