classification
Title: 'pydoc -k' fails when some module's loader is not found
Type: behavior Stage: patch review
Components: Library (Lib) Versions: Python 3.9
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: christian.heimes, dlax
Priority: normal Keywords: patch

Created on 2022-01-12 08:53 by dlax, last changed 2022-01-12 13:04 by dlax.

Pull Requests
URL Status Linked Edit
PR 30557 open dlax, 2022-01-12 13:04
Messages (2)
msg410388 - (view) Author: Denis Laxalde (dlax) * Date: 2022-01-12 08:53
On my (Debian 10) system, 'pydoc -k' crashes as follows:                              

    $ python3 -m pydoc -k foo
    Traceback (most recent call last):
      File "/usr/lib/python3.9/runpy.py", line 197, in _run_module_as_main
        return _run_code(code, main_globals, None,
      File "/usr/lib/python3.9/runpy.py", line 87, in _run_code
        exec(code, run_globals)
      File "/usr/lib/python3.9/pydoc.py", line 2862, in <module>
        cli()
      File "/usr/lib/python3.9/pydoc.py", line 2795, in cli
        apropos(val)
      File "/usr/lib/python3.9/pydoc.py", line 2287, in apropos
        ModuleScanner().run(callback, key, onerror=onerror)
      File "/usr/lib/python3.9/pydoc.py", line 2248, in run
        loader = spec.loader
    AttributeError: 'NoneType' object has no attribute 'loader'

(The same happens with current 'main' of CPython.)

The module that is tried to be loaded is 'ansible.galaxy.data', installed in /usr/lib/python3/dist-packages/ and it uses a custom (Ansible) finder _AnsiblePathHookFinder.

Maybe this finder has problems, but since Finder.find_module() may return None, I believe this should be handled by pydoc's ModuleScanner.

If agreed, I'll prepare a fix accordingly.
msg410389 - (view) Author: Christian Heimes (christian.heimes) * (Python committer) Date: 2022-01-12 09:17
An exception is not a crash. We reserve the word "crash" for segfaults.
History
Date User Action Args
2022-01-12 13:04:25dlaxsetkeywords: + patch
stage: patch review
pull_requests: + pull_request28758
2022-01-12 09:17:29christian.heimessettitle: 'pydoc -k' crashes when some module's loader is not found -> 'pydoc -k' fails when some module's loader is not found
nosy: + christian.heimes

messages: + msg410389

type: crash -> behavior
2022-01-12 08:53:18dlaxcreate