[Python-ideas] __loader__.get_source(): semantics of returning None
Jeroen Demeyer
J.Demeyer at UGent.be
Sat Apr 28 12:09:10 EDT 2018
The documentation of __loader__.get_source() says
"Returns None if no source is available (e.g. a built-in module)."
But what does "no source is available" mean precisely? It could mean
either of two things:
(A) I am absolutely certain that there is no source anywhere to be found.
(B) I don't know where to find the source, but if you look hard enough,
you may find it.
Currently, linecache interprets it as (A). Is there any chance that we
can either change the interpretation for returning None to (B) or to
provide an officially documented way to answer (B)? This could be using
a new return value (say, NotImplemented) or by not implementing
get_source at all (such that __loader__.get_source raises
AttributeError). The latter is probably how things already work in
practice, but it isn't really documented that way.
The context for this question/proposal is https://bugs.python.org/issue32797
When the linecache module is asked for the source code of a certain
file, it queries the __loader__.get_source() for the source code. If
this returns None, that's the end: no source is returned.
However, linecache is also passed the filename! So even if it could find
the source by filename, it won't even try that if get_source() returns None.
Jeroen.
More information about the Python-ideas
mailing list