进入回调函数时PDB中的突发异常

时间:2015-05-24 12:00:32

标签: python python-3.4 pdb

我正在尝试调试我的python应用程序,该应用程序使用" mailbot"模块以及触发的用户回调。这些是在收到特定电子邮件时触发的。昨天,用PDB调试应用程序工作得很好,我完成了我的工作。但是今天似乎世界已经发生了变化......我无法记得自昨天以来改变了任何相关代码,但是当我在PDB设置中调用我的应用程序时,它会导致很多例外,我不知道如何解释。

省略PDB并使用python application.py启动应用程序时,应用程序运行正常。所以(以及错误消息也提示它),这些问题似乎与我的应用程序,回调的使用或mailbot模块没有任何关系。

这是错误消息之前的故事。对不起,这看起来很冗长。

在PDB模式下启动python ...

C:\...> python -m pdb application.py
> c:\...\application.py(2)<module>()
-> from __future__ import print_function

在异常之前将断点设置为一步......

(Pdb) b c:\PROGS\Python34\Lib\site-packages\mailbot\mailbot.py:52
Breakpoint 1 at c:\progs\python34\lib\site-packages\mailbot\mailbot.py:52

开始执行直到断点......

(Pdb) c
> c:\progs\python34\lib\site-packages\mailbot\mailbot.py(52)process_message()
-> return callback.trigger()

显示相关商家信息...

(Pdb) l
 47
 48         def process_message(self, message, callback_class, rules):
 49             """Check if callback matches rules, and if so, trigger."""
 50             callback = callback_class(message, rules)
 51             if callback.check_rules():
 52 B->             return callback.trigger()
 53
 54         def process_messages(self):
 55             """Process messages: check which callbacks should be triggered."""
 56             from . import CALLBACKS_MAP
 57             self.reset_timeout_messages()

检查下一个声明......

(Pdb) callback.trigger
<bound method cbLookUpMindmapAndSendText.trigger of <callbacks.cbLookUpMindmapAndSendText object at 0x02EB95B0>>

加入回调......

(Pdb) s
--Call--
Traceback (most recent call last):
  File "C:\PROGS\Python34\lib\pdb.py", line 1661, in main
    pdb._runscript(mainpyfile)
  File "C:\PROGS\Python34\lib\pdb.py", line 1542, in _runscript
    self.run(statement)
  File "C:\PROGS\Python34\lib\bdb.py", line 431, in run
    exec(cmd, globals, locals)
  File "<string>", line 1, in <module>
  File "c:\...\application.py", line 25, in <module>
    mailbox.process_messages()
  File "C:\PROGS\Python34\lib\site-packages\mailbot\mailbot.py", line 64, in process_messages
    self.process_message(message, callback_class, rules)
  File "C:\PROGS\Python34\lib\site-packages\mailbot\mailbot.py", line 52, in process_message
    return callback.trigger()
Traceback (most recent call last):
  File "C:\PROGS\Python34\lib\pdb.py", line 1661, in main
    pdb._runscript(mainpyfile)
  File "C:\PROGS\Python34\lib\pdb.py", line 1542, in _runscript
    self.run(statement)
  File "C:\PROGS\Python34\lib\bdb.py", line 431, in run
    exec(cmd, globals, locals)
  File "<string>", line 1, in <module>
  File "c:\...\application.py", line 25, in <module>
    mailbox.process_messages()
  File "C:\PROGS\Python34\lib\site-packages\mailbot\mailbot.py", line 64, in process_messages
    self.process_message(message, callback_class, rules)
  File "C:\PROGS\Python34\lib\site-packages\mailbot\mailbot.py", line 52, in process_message
    return callback.trigger()
  File "C:\...\callbacks.py", line 20, in trigger
  File "C:\PROGS\Python34\lib\bdb.py", line 50, in trace_dispatch
    return self.dispatch_call(frame, arg)
  File "C:\PROGS\Python34\lib\bdb.py", line 82, in dispatch_call
    self.user_call(frame, arg)
  File "C:\PROGS\Python34\lib\pdb.py", line 249, in user_call
    self.interaction(frame, None)
  File "C:\PROGS\Python34\lib\pdb.py", line 345, in interaction
    self.print_stack_entry(self.stack[self.curindex])
  File "C:\PROGS\Python34\lib\pdb.py", line 1447, in print_stack_entry
    self.format_stack_entry(frame_lineno, prompt_prefix))
  File "C:\PROGS\Python34\lib\bdb.py", line 411, in format_stack_entry
    line = linecache.getline(filename, lineno, frame.f_globals)
  File "C:\PROGS\Python34\lib\linecache.py", line 15, in getline
    lines = getlines(filename, module_globals)
  File "C:\PROGS\Python34\lib\linecache.py", line 41, in getlines
    return updatecache(filename, module_globals)
  File "C:\PROGS\Python34\lib\linecache.py", line 127, in updatecache
    lines = fp.readlines()
  File "C:\PROGS\Python34\lib\codecs.py", line 319, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 351: invalid start byte

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\PROGS\Python34\lib\runpy.py", line 170, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\PROGS\Python34\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\PROGS\Python34\lib\pdb.py", line 1685, in <module>
    pdb.main()
  File "C:\PROGS\Python34\lib\pdb.py", line 1673, in main
    traceback.print_exc()
  File "C:\PROGS\Python34\lib\traceback.py", line 252, in print_exc
    print_exception(*sys.exc_info(), limit=limit, file=file, chain=chain)
  File "C:\PROGS\Python34\lib\traceback.py", line 169, in print_exception
    for line in _format_exception_iter(etype, value, tb, limit, chain):
  File "C:\PROGS\Python34\lib\traceback.py", line 153, in _format_exception_iter
    yield from _format_list_iter(_extract_tb_iter(tb, limit=limit))
  File "C:\PROGS\Python34\lib\traceback.py", line 18, in _format_list_iter
    for filename, lineno, name, line in extracted_list:
  File "C:\PROGS\Python34\lib\traceback.py", line 65, in _extract_tb_or_stack_iter
    line = linecache.getline(filename, lineno, f.f_globals)
  File "C:\PROGS\Python34\lib\linecache.py", line 15, in getline
    lines = getlines(filename, module_globals)
  File "C:\PROGS\Python34\lib\linecache.py", line 41, in getlines
    return updatecache(filename, module_globals)
  File "C:\PROGS\Python34\lib\linecache.py", line 127, in updatecache
    lines = fp.readlines()
  File "C:\PROGS\Python34\lib\codecs.py", line 319, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 351: invalid start byte

C:\...>

任何提示,在何处或如何为解决方案工作?

谢谢。 nnako

1 个答案:

答案 0 :(得分:1)

最后,我通过尝试在Linux机器上运行应用程序找到了解决方案。在Windows上运行它(没有PDB)导致无错误。 Linux在尝试运行命令python application.py时显示此输出:

Traceback (most recent call last):
  File "application.py", line 12, in <module>
    import callbacks
  File "/home/pi/examples/callbacks.py", line 16
SyntaxError: Non-ASCII character '\xfc' in file /home/pi/examples/callbacks.py on line 16, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

所以我发现奇怪的是由不可打印的角色引起的&#34; \ xfc&#34;隐藏在评论行的某个地方。删除行并重新键入其内容解决了问题。即使我不知道这怎么可能导致上面帖子中描述的异常消息。

希望,有一天这会对某人有所帮助。

感谢。 nnako