【问题标题】:Python callback handlers- better error messages?Python 回调处理程序——更好的错误消息?
【发布时间】:2013-03-06 14:51:13
【问题描述】:

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

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

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

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

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

...没有回溯,没有崩溃,仅此而已。调试并找出我做错了什么非常令人困惑!我期待至少正常的回溯:

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

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

现在我发现它就像回调中的一种运行时错误某种有用的信息,它使编码有点困难。

这是什么原因造成的?我可以做些什么来获取常规的、更详细的回溯

【问题讨论】:

    标签: python json error-handling stomp traceback


    【解决方案1】:

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

    的东西
    import logging
    logging.basicConfig(level=logging.DEBUG)
    

    这应该捕获日志级别 DEBUG 及以上的所有输出。阅读日志文档以获取更多信息:)

    【讨论】:

      【解决方案2】:

      可以在here 找到获取记录器的说明(这是直接要求的),但详细的回溯被禁止。

      如果您查看code which is calling on_message,您会注意到该块位于没有excepttry 块中。

      第 703 行是实际调用该方法的位置:

              notify_func = getattr(listener, 'on_%s' % frame_type)
              notify_func(headers, body)
      

      在方法 __notify 中(在第 639 行声明):

      def __notify(self, frame_type, headers=None, body=None):
      

      这些是它不在 try 块中的时间:

      • 331(用于connected 事件)
      • send 事件为 426
      • 743 代表disconnected

      但是调用message的时间是第727行:

      # line 719
      try:
          # ....
          self.__notify(frame_type, headers, body)
      

      【讨论】:

      • @Inks 抱歉,我不得不提供坏消息。
      【解决方案3】:

      最后,我按名称抓取了记录器并在其上设置了 StreamHandler:

      import logging
      
      log = logging.getLogger('stomp.py')
      strh = logging.StreamHandler()
      strh.setLevel(logging.ERROR)
      log.addHandler(strh);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-13
        • 2019-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-30
        • 1970-01-01
        • 2021-10-07
        相关资源
        最近更新 更多