[Python-Dev] dir() in inspect.py ? (original) (raw)

Christian Tismer tismer at stackless.com
Mon May 21 12:14:09 CEST 2012


On 21.05.12 07:52, Stefano Taschini wrote:

On 21 May 2012 03:36, Guido van Rossum <guido at python.org_ _<mailto:guido at python.org>> wrote:

[...] I have to agree with Christian that inspect.py is full of hacks and heuristics that would be fine in a module that's part of a user's app or even in a library, but stand out as brittle or outright unreliable in a stdlib module. Basically, you can't trust that inspect.py will work. I've seen various occasions (sorry, can't remember details) where some function in it outright crashed when given a slightly unusual (but not unreasonable) argument. It might be a nice project for a new contributor to improve this situation. [...]

An example that crashes is >>> def f(l, (x, y)): ... sup = max(ux + vy for u, v in l) ... return ((u, v) for u, v in l if ux + vy == sup) >>> inspect.getargspec(f) See http://bugs.python.org/issue14611 . I did submit a patch, a few weeks ago.

Nice finding, not related to dir() usage but very useful to know. I looked over test_inspect.py a bit, which is quite big and has many tests, although very little references to reported bugs, and this opcode combination was obviously missing in the test cases.

Did not find your patch yet (no time), but hope you added an extra testcase with explicit reference to the bug reported.

inspect is very nice and useful in many cases, but sometimes not. Instead of using things like currentframe() I have a look and write my own version because the convenience is too little compared to an extra import and dependency. And although currentframe() is mentioned in test_inspect, I cannot find any direct testcase for it that really calls this function.

Admittedly a trivial case, but it is one reason, besides dissed dir() usage, that makes me think of 'suspect' ;-)

Instead, I'd love to use inspect as the basis to write reliable, portable code, because its abstraction hides implementation details nicely. I think we have reached when things like sys._getframe() are declared as deprecated.

""" This is no longer recommended to use. Use inspect.currentframe instead """

cheers - chris

-- Christian Tismer :^)<mailto:tismer at stackless.com> tismerysoft GmbH : Have a break! Take a ride on Python's Karl-Liebknecht-Str. 121 : Starship http://starship.python.net/ 14482 Potsdam : PGP key -> http://pgp.uni-mainz.de work +49 173 24 18 776 mobile +49 173 24 18 776 fax n.a. PGP 0x57F3BF04 9064 F4E1 D754 C2FF 1619 305B C09C 5A3B 57F3 BF04 whom do you want to sponsor today? http://www.stackless.com/

-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20120521/6e282bb9/attachment.html>



More information about the Python-Dev mailing list