[issue25884] inspect.getmro() fails when base class lacks __bases__ attribute.
Brandon Zerbe added the comment: I am using Python 2.7.5. The segment of code from inspect that I previously extracted came from line 332 although you may also find it by "finding" _searchbases. This is really an issue with Forthon: http://hifweb.lbl.gov/Forthon/ Specifically the Forthon class, which I think is older than current standards. If you guys want this Forthon class to flag an error (I can work around that too), than the proposed fix I sent can be rejected, and this ticket can be closed. I just wanted to bring this case to you attention just in case. Thanks again, Brandon Quoting "R. David Murray" <rep...@bugs.python.org>: > > R. David Murray added the comment: > > Which version of python are you running? I can't match that > traceback up to the code in the current 2.7 inspect module. > > That said, the same issue probably exists in the current code. A 2.7 > class is expected to have either an __mro__ or a __bases__ attribute, > and if it has neither inspect probably *should* throw an error, since > it can't know what to do with the class. The error could be clearer, > though. > > But, let's see what others think. > > -- > nosy: +r.david.murray > > ___ > Python tracker <rep...@bugs.python.org> > <http://bugs.python.org/issue25884> > ___ > -- ___ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue25884> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue25884] inspect.getmro() fails when base class lacks __bases__ attribute.
New submission from Brandon Zerbe: I am using a possibly non-standard python package called Forthon, and when I inspect an object that is dependent on the Forthon class, I get the following error: File "/Users/zerbeb/homemade_programs/config2class/src/method_parsing.py", line 18, in get_all_init_args inherited_classes = inspect.getmro(class_obj) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 346, in getmro if hasattr(cls, "__bases__"): File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 337, in _searchbases for base in cls.__bases__: AttributeError: 'Forthon' object has no attribute '__bases__' This was easy enough to fix, simply add "if not hasattr(cls,'__bases__'): return" to the _searchbases function: def _searchbases(cls, accum): # Simulate the "classic class" search order. if cls in accum: return if not hasattr(cls, "__bases__"): #Additional code. return accum.append(cls) for base in cls.__bases__: _searchbases(base, accum) Maybe you have a better solution, but I think this edge case can be trivially solved however you decide to edit the code. Thanks! -- messages: 256525 nosy: billyziege priority: normal severity: normal status: open title: inspect.getmro() fails when base class lacks __bases__ attribute. versions: Python 2.7 ___ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue25884> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com