Issue 28451: pydoc.safeimport() raises ErrorDuringImport() if builtin.import is monkey patched (original) (raw)
pydoc.safeimport()
should return None
if the module isn't found.
If Python's default __import__
is monkey patched, (e.g., by using gevent)
the function misbehaves. According to the current implementation,
the function returns None
by checking the only last entry of the traceback
if ImportError
is thrown during calling __import__()
.
If __import__
is monkey patched, extra entries can be mixed into the
original traceback when ImportError
is raised. In the case when the module
is not found, ErrorDuringImport
is being raised rather than returning None
after failing checking the traceback because current implementation only
checks the last traceback entry.
The important thing is to check whether ImportError
is raised inside
safeimport()
, I think it's okay to check the whole traceback entries
instead of checking the only last item.
Please check the attached patch which I suggest. Thank you.