[Python-Dev] Should there be a way or API for retrieving from a code object a loader method and package file where the code comes from? (original) (raw)

R. Bernstein rocky at panix.com
Wed Dec 24 05:22:09 CET 2008


Nick Coghlan writes:

R. Bernstein wrote:

Nick Coghlan writes:

  1. Do what a number of standard library APIs (e.g. linecache) that accept filenames do and also accept an optional "module globals" argument.

Actually, I did this and committed a change (to pydb) before posting any of these queries. ;-)

If "a number of standard library APIs" are doing the same thing, then shouldn't this exposed as a common routine?

If on the other hand, by "a number" you mean "one" as in linecache -- 1 is a number too! -- then perhaps the relevant code that is buried inside the "updatecache" should be exposed on its own. (As a side benefit that code can be tested separately too!)

Should I file a feature request for this?

The reason for my slightly odd phrasing is that all of the examples I was originally going to mention (traceback, pdb, doctest, inspect) actually all end up calling linecache to do the heavy lifting.

So it is possible that linecache.getlines() actually is the common routine you're looking for

I never asked about getting the text lines for the source code, no matter how many times people suggest that as an alternative. :-)

Instead, I was asking about a common way to get information about the source location for say a frame or traceback object (which might include package name and type) and suggest that there should be a more unambiguous way to display this information than seems to be in use at present.

Part of work to retrieve or displaying that information has to do the some of the same things that is inside of linecache.updatecache() before it retrieves the lines of the source code (when possible). And possibly parts of it include parts of what's done in pieces of the inspect module.

For cases where you have an appropriate Python object (i.e. a module, function, method, class, traceback, frame or code object) rather than a pseudo-filename, then inspect.getsource() actually jumps through a lot of hoops to try to find the actual source code for that object - in those cases, using the appropriate inspect function is generally a much better idea than trying to interpret file yourself.

Cheers, Nick.

Thanks for the information. I will keep in mind those inspect routines.

They probably will be a helpful for another problem I had been wondering about -- how one can determine if there is no code associated at a given a line and file. (In other words and invalid location for a debugger line breakpoint, such as because the line part of a comment or the interior line of a string that spans many lines)

-- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia


Python-Dev mailing list Python-Dev at python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/rocky%40gnu.org



More information about the Python-Dev mailing list