Python调试坑

作者: Readme | 来源:发表于2014-07-25 10:04 被阅读531次

           写python的人一般都不太看重调试, 因为这是一门解释性语言, 在哪出错会立马在解释器里提示出来。但是, 以上观点只适用于小的脚本或者项目。因为我在接触目前项目之前, 我一直都是这么做的。

            对于一个大的项目来说, 调试就不能这么做了, 这种大项目通常都是多进程或者多线程, 普通的调试基本没办法。通常会通过记录日志来调试, 记录日志。。这里就是我想说得一个坑。正常的项目里面都会有容错处理, 也就是各种try...except, 然后把抛出的异常写到日志, 出错的时候就可以通过看错误日志去定位信息。 但是, 抛出的异常通常只是一句话, 无法得到具体的错误代码行, 这在一个模块比较多的项目里简直就是噩梦, 你可能要花费很多时间去定位错误所在地方, 效率极其低下。 肿么办呢, python里面有一个模块叫traceback, 这个模块是干嘛的呢, 请看官方解释:

    This module provides a standard interface to extract, format and print stack traces of Python programs. It exactly mimics the behavior of the Python interpreter when it prints a stack trace. This is useful when you want to print stack traces under program control, such as in a “wrapper” around the interpreter.

             也就是说, 这个模块就像一个缩小版的解释器一样, 可以跟踪代码运行栈。 简单来说, 可以看到代码详细出错信息, 包括在哪出错。怎么用呢, 就说一种用法, 我觉得够用了:

    import traceback

    try:1/0

    except Exception as e:traceback.print_exc(file=open('/tmp/error', 'wb'))

    这样程序在抛出异常后, 就会将出错信息写到'/tmp/error'这个文件中, just enjoy it!

    另外要说的一种方法是logging模块中用到的方法。

    对于大型项目而言,用logging模块调试是一种更好的方法,日志集中管理。

    要使用日志,首先要声明一个logger,具体怎么声明这里不再赘述,参见python官方文档或者google。

    效果和traceback一样,代码如下:

    try:1/0

    except Exception as e:logger.exception(e)

    相关文章

      网友评论

      • Readme:补充: 也可以通过logger.exception的方式

      本文标题:Python调试坑

      本文链接:https://www.haomeiwen.com/subject/wgbstttx.html