Nick Coghlan added the comment:

My current inclination is that the right fix here is to have a hard limit in 
inspect.unwrap() itself, on the basis of "we won't eat all the memory on your 
machine, even when other code produces an infinite chain of distinct 
__wrapped__ attributes" is a guarantee that function should aim to be offering.

Since the limit is arbitrary anyway, sys.getrecursionlimit() seems like a 
reasonable choice. The current id-based checked then just becomes a way to bail 
out early if there's an actual cycle in the wrapper chain, with the hard limit 
only being reached in the case of introspection on recursively generated 
attributes.

Looking at the current inspect.signature and pydoc handling, inspect.signature 
lets the ValueError escape, while pydoc intercepts it and handles it as "no 
signature information available".

The inspect.signature case seems reasonable, but in pydoc, it may be worth 
trying inspect.signature a second time, only with "follow_wrapped=False" set in 
the call.

(I'm somewhat regretting raising ValueError rather than RecursionError for the 
infinite loop detection case, but I'm not sure it's worth the effort to change 
it at this point - the main benefit from doing so in 3.6 would be to better 
enable the "don't follow the wrapper chain when it's broken" fallback in pydoc)

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue25532>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to