[issue25884] inspect.getmro() fails when base class lacks __bases__ attribute.

2020-11-30 Thread Irit Katriel


Irit Katriel  added the comment:

The _searchbases function was removed here, when getmro was simplified 
following the removal of old style classes:

https://github.com/python/cpython/commit/b82c8e5b27a8d8ec441aeab5d01d6d9bd8e6d7ef

--
nosy: +iritkatriel
resolution:  -> out of date
stage:  -> resolved
status: open -> closed

___
Python tracker 

___
___
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.

2015-12-16 Thread Brandon Zerbe

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" :

>
> 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 
> 
> ___
>

--

___
Python tracker 

___
___
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.

2015-12-16 Thread Brandon Zerbe

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 

___
___
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.

2015-12-16 Thread R. David Murray

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 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com