尝试打开模块时pudb3引发TypeError

时间:2019-04-18 01:04:48

标签: python python-3.x pudb

最近,我注意到我无法在pudb3中打开任何模块。以前,我经常使用该系统。我不确定哪些更改会破坏我的pudb环境。我该如何解决这个问题?

我的环境

  • Ubuntu 16.04
  • pudb。版本:2018.1
$ python -V
Python 3.7.2
$ which python
/home/jef/anaconda3/bin/python
$ which pudb3
/home/jef/anaconda3/bin/pudb3

重现错误

  1. 运行$ pudb3 my_program.py --x y
  2. m打开模块。
  3. 然后,它引发以下异常

traceback.txt

Traceback (most recent call last):
  File "/home/jef/anaconda3/lib/python3.7/site-packages/pudb/__init__.py", line 119, in runscript
    dbg._runscript(mainpyfile)
  File "/home/jef/anaconda3/lib/python3.7/site-packages/pudb/debugger.py", line 457, in _runscript
    self.run(statement, globals=globals_, locals=locals_)
  File "/home/jef/anaconda3/lib/python3.7/bdb.py", line 585, in run
    exec(cmd, globals, locals)
  File "<string>", line 1, in <module>
  File "eval.py", line 1, in <module>
    """An evaluation tool for various semantic analytis desigining services"""
  File "eval.py", line 1, in <module>
    """An evaluation tool for various semantic analytis desigining services"""
  File "/home/jef/anaconda3/lib/python3.7/bdb.py", line 88, in trace_dispatch
    return self.dispatch_line(frame)
  File "/home/jef/anaconda3/lib/python3.7/site-packages/pudb/debugger.py", line 187, in dispatch_line
    self.user_line(frame)
  File "/home/jef/anaconda3/lib/python3.7/site-packages/pudb/debugger.py", line 408, in user_line
    self.interaction(frame)
  File "/home/jef/anaconda3/lib/python3.7/site-packages/pudb/debugger.py", line 376, in interaction
    show_exc_dialog=show_exc_dialog)
  File "/home/jef/anaconda3/lib/python3.7/site-packages/pudb/debugger.py", line 2118, in call_with_ui
    return f(*args, **kwargs)
  File "/home/jef/anaconda3/lib/python3.7/site-packages/pudb/debugger.py", line 2362, in interaction
    self.event_loop()
  File "/home/jef/anaconda3/lib/python3.7/site-packages/pudb/debugger.py", line 2328, in event_loop
    toplevel.keypress(self.size, k)
  File "/home/jef/anaconda3/lib/python3.7/site-packages/pudb/ui_tools.py", line 106, in keypress
    result = self._w.keypress(size, key)
  File "/home/jef/anaconda3/lib/python3.7/site-packages/urwid/container.py", line 1131, in keypress
    return self.body.keypress( (maxcol, remaining), key )
  File "/home/jef/anaconda3/lib/python3.7/site-packages/urwid/container.py", line 2271, in keypress
    key = w.keypress((mc,) + size[1:], key)
  File "/home/jef/anaconda3/lib/python3.7/site-packages/urwid/container.py", line 1590, in keypress
    key = self.focus.keypress(tsize, key)
  File "/home/jef/anaconda3/lib/python3.7/site-packages/pudb/ui_tools.py", line 111, in keypress
    return handler(self, size, key)
  File "/home/jef/anaconda3/lib/python3.7/site-packages/pudb/debugger.py", line 1355, in pick_module
    build_filtered_mod_list(filt_edit.get_edit_text()))
  File "/home/jef/anaconda3/lib/python3.7/site-packages/pudb/debugger.py", line 1319, in build_filtered_mod_list
    for name, mod in list(sys.modules.items())
  File "/home/jef/anaconda3/lib/python3.7/site-packages/pudb/debugger.py", line 1320, in <genexpr>
    if mod_exists(mod))
  File "/home/jef/anaconda3/lib/python3.7/site-packages/pudb/debugger.py", line 1301, in mod_exists
    base, ext = splitext(filename)
  File "/home/jef/anaconda3/lib/python3.7/posixpath.py", line 122, in splitext
    p = os.fspath(p)
TypeError: expected str, bytes or os.PathLike object, not NoneType

更新1

我通过删除.zshrc禁用了我的zsh,并且不使用tmux。但是,它仍然会引发相同的错误。

1 个答案:

答案 0 :(得分:0)

/usr/lib/python3.7/site-packages/pudb/debugger.py上应用this patch可以解决我的Fedora 31系统上的相同问题。将pudb升级到新版本将具有相同的效果(2019.12019.2都具有该更改)。

补丁很小,所以我将其包含在这里。

commit af3bdb6e7c81b036dbc71690109b81e30b3c1185
Author: Alex Fikl <alexfikl@gmail.com>
Date:   Thu Aug 9 09:53:39 2018 -0500

    debugger: skip namespace packages in module listing

diff --git a/pudb/debugger.py b/pudb/debugger.py
index 444eaa6..da66884 100644
--- a/pudb/debugger.py
+++ b/pudb/debugger.py
@@ -1297,6 +1297,8 @@ class DebuggerUI(FrameVarInfoKeeper):
             def mod_exists(mod):
                 if not hasattr(mod, "__file__"):
                     return False
+                if mod.__file__ is None:
+                    return False
                 filename = mod.__file__

                 base, ext = splitext(filename)