logging

    print() 替换为 logging 是第3种方式,和 assert 比, logging 不会抛出错误,而且可以输出到文件:

    import logging



    s = '0'

    n = int(s)

    logging.info('n = %d' % n)

    print(10 / n)

    logging.info() 就可以输出一段文本。运行,发现除了 ZeroDivisionError ,没有任何信息。怎么回事?

    别急,在 import logging 之后添加一行配置再试试:

    import logging

    logging.basicConfig(level=logging.INFO)

    看到输出了:

    $ python3 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

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

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