Python 回调处理程序 - 更好的错误消息?

Sam*_*gan 1 python error-handling json stomp traceback

我正在使用stomp.py库通过网络获取 JSON 消息。我已经修改了他们在此处提供的简单示例,该示例使用回调来提供消息处理。

但是当我修改那个回调时我犯了一个简单的错误 - 例如,我在尝试解析我的 JSON 字符串时调用了 json.load() 而不是 json.loads() 。

class MyListener(object):
    def on_message(self, headers, message):
        data = json.load(message)           ## Should be .loads() for a string!
Run Code Online (Sandbox Code Playgroud)

通常这会很好 - 它会出现 AttributeError 并且我会看到回溯。但在这种情况下,Python 打印:

找不到记录器“stomp.py”的处理程序

...没有回溯,没有崩溃,仅此而已。调试非常混乱,找出我做错了什么!我至少期待以下方面的正常追溯:

Traceback (most recent call last):
  File "./ncl/stomp.py-3.1.3/stompJSONParser.py", line 32, in <module>
    [etc etc ...]
Run Code Online (Sandbox Code Playgroud)

......而不是让整个听众感到厌烦。我猜是因为那发生在不同的线程上?

现在我已经发现它就像回调中的一种运行时错误我至少知道我在出错时做错了什么 - 但如果它只是为我犯的每个错误喷出那个错误而不是给我某种有用的消息,这使得编码有点困难。

这是什么原因造成的?我该怎么做才能获得常规的、更详细的回溯

小智 5

看起来它期望设置来自Python 日志模块的日志处理程序以捕获输出。有很多可能的日志配置。但是为了简单的调试,我会使用类似的东西

import logging
logging.basicConfig(level=logging.DEBUG)
Run Code Online (Sandbox Code Playgroud)

那应该捕获日志级别 DEBUG 及更高级别的所有输出。阅读日志文档了解更多信息:)