pudb3 raises TypeError when I try to open modules

176 Views Asked by At

Recently, I noticed I could not open any modules in pudb3. Previously, I often used the system. I am not sure what changes break my pudb environment. How do I fix this problem?

My Environment

  • Ubuntu 16.04
  • pudb.version: 2018.1
$ python -V
Python 3.7.2
$ which python
/home/jef/anaconda3/bin/python
$ which pudb3
/home/jef/anaconda3/bin/pudb3

Reproduce the error

  1. Run $ pudb3 my_program.py --x y
  2. Press m to open modules.
  3. Then, it raises the below exception

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

Update 1

I disabled my zsh by removing .zshrc and do not use tmux. Yet, it still raises the same error.

1

There are 1 best solutions below

0
On

Applying this patch to /usr/lib/python3.7/site-packages/pudb/debugger.py cleared up the same problem on my Fedora 31 system. Upgrading pudb to a newer version would have the same effect (both 2019.1 and 2019.2 have that change).

The patch is small so I'll include it here.

commit af3bdb6e7c81b036dbc71690109b81e30b3c1185
Author: Alex Fikl <[email protected]>
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)