V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sunway1988
V2EX  ›  问与答

Python 出错问题定位经验请教!

  •  
  •   sunway1988 · 2016-01-19 11:20:30 +08:00 · 2362 次点击
    这是一个创建于 3267 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Python 开发过程中,经常遇到这样的问题:

    Python 代码在加了异常处理 try...except... 之后,一旦出现异常即被匹配的 except 处理,屏蔽掉了很多出错的信息,造成很难确定问题的原因;

    一种处理方案:

    在代码中打很多 log,这样会增加很多日志信息,另外就是,有些小问题(比如下标引用出错,不存在该字典键值,等)依然因为会因 except 而呗屏蔽,对于此,可以在每个 except 处打出 log

    以上就是我的个人做法,请问各位,一般有什么比较好的做法呢?欢迎不吝赐教!

    第 1 条附言  ·  2016-01-19 13:44:40 +08:00

    首先,非常感谢各位的建议,很受用,很有启发。

    异常 raiseexcept 有什么好的做法,有时候感觉 Exception 比较多,比较混乱,捕获路径也比较混乱。一般有什么好的做法,比如就近捕获再向上传递,等等。

    4 条回复    2016-01-19 12:47:44 +08:00
    SpicyCat
        1
    SpicyCat  
       2016-01-19 12:04:29 +08:00
    每个异常处都打 log 是通常做法吧?有异常不抛就算了,连 log 也不打,那岂不要坑死调试的人?
    yangtukun1412
        2
    yangtukun1412  
       2016-01-19 12:37:06 +08:00
    一般建议只捕获具体的异常而不是 except Exception 这样捕获全部异常。

    如果你捕获了全部异常,那打日志是最基本操作的,而且往往需要打 traceback 日志来记录出现问题的行数。
    strahe
        3
    strahe  
       2016-01-19 12:44:20 +08:00
    尽量不要用`except` 和 `except Exception` ,截取所有错误,推荐你看《改善 Python 程序的 91 个建议》
    Mark3K
        4
    Mark3K  
       2016-01-19 12:47:44 +08:00
    一般情况下在有必要进行异常处理的地方捕获异常进行处理,而且是你自己清楚的具体异常,这样可以在程序因非期望异常而崩溃的时候,尽早发现一些潜在的 BUG ;另外记录异常的时候可以使用 logger.error(e, exc_info=True)输出 traceback 信息;
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3279 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:15 · PVG 08:15 · LAX 16:15 · JFK 19:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.