On 18 April 2015 at 22:40, Ionel Cristian Mărieș <contact@ionelmc.ro> wrote:
On Sun, Apr 19, 2015 at 12:34 AM, Chris Angelico <rosuav@gmail.com> wrote:
Uhh, that's not exactly true. Maybe it's true of the other three of the Big Four (Jython, IronPython, PyPy), but there are several other Pythons which are compliant with a version 3.x spec; MicroPython and Brython come to mind.
Ok, but what's reasonable here? I think you're implying here that this small change should go through a PEP process.
So a question for the list, does this seemingly small change warrant a PEP?
Note that the docs for callable() explicitly allow for false positives - callable(x) is true, but x() fails. See https://docs.python.org/3/library/functions.html#callable ("If this returns true, it is still possible that a call fails"). The "bug" you mentioned earlier in the thread is precisely that - a case where callable() returns True but calling the object fails:
It doesn't really work because of the incomplete checks done in `callable_builtin`. This is what I've tried:
class DynamicCallable: ... is_callable = True ... ... def __init__(self, target): ... self.target = target ... ... @property ... def __call__(self): ... if self.is_callable: ... return self.target ... else: ... raise AttributeError("Not really ...") ... dc = DynamicCallable(print) dc(1, 2, 3) 1 2 3 callable(dc) True dc.is_callable = False callable(dc) True ###### This should be False :(
If the "bug" is fixed, then the last thing in the above example would return False..
So I'm not clear what "small change" you're referring to here: * A change to CPython to reduce the number of false positives by making this case return False? If that, then no, I don't think a PEP is needed. But note that user code still can't assume that the above behaviour couldn't still happen in *other* cases, so the change would be of limited value (and whether it gets accepted depends on whether the complexity is justified by the benefit). * A change to the definition of callable() to remove the possibility of false positives at all? In that case, yes, a PEP probably *is* needed, as that's going to affect an awful lot of corner cases, and will impact all implementations. It's probably not correct to call this a "small change". * Something else? Paul