[New-bugs-announce] [issue35137] Exception in isinstance when __class__ property raises

Anthony Sottile report at bugs.python.org
Thu Nov 1 12:43:59 EDT 2018


New submission from Anthony Sottile <asottile at umich.edu>:

This may be intentional, but the behaviour changed between python2 and python3.  Want to make sure it's intentional as we're working (hacking) around this in pytest: https://github.com/pytest-dev/pytest/pull/4284

The actual impact on pytest is the use of `inspect.isclass`

Simplest reproduction:

class C(object):
    @property
    def __class__(self):
        raise AssertionError('fail')

isinstance(C(), type)


In python2.x:

$ python2 t.py
$

In python 3.x:

$ python3.7 t.py
Traceback (most recent call last):
  File "t.py", line 6, in <module>
    isinstance(C(), type)
  File "t.py", line 4, in __class__
    raise AssertionError('fail')
AssertionError: fail


In python2.x it appears there's code which intentionally avoids this case:

https://github.com/python/cpython/blob/ca079a3ea30098aff3197c559a0e32d42dda6d84/Objects/abstract.c#L2906-L2909

Mostly want to see if this is intentional or not, it does feel odd that `inspect.isclass` raises instead of returning `False` in this case, but it's unclear if it's a problem with `isclass` or `isinstance`

----------
components: Library (Lib)
messages: 329078
nosy: Anthony Sottile
priority: normal
severity: normal
status: open
title: Exception in isinstance when __class__ property raises
type: behavior
versions: Python 3.7, Python 3.8

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue35137>
_______________________________________


More information about the New-bugs-announce mailing list