Wie @Selcuk bereits erwähnt Sie eine None
in Ihrem listOfObjects
haben. Um diesen Fall zu fangen können Sie überprüfen, ob sie diese Methode haben unter Verwendung von:
#Assuming that someObject has method "someMethod"
otherList = []
for someObject in listOfObjects:
if getattr(someObject, 'someMethod', lambda : True)() != True:
otherList.append(someObject)
getattr
werden versuchen, das Verfahren zu bekommen, und wenn es keine solche Methode hat, wird es eine Funktion zurück, die True
zurück, wenn genannt. Eine Alternative ist es gerade diese Ausnahmen zu fangen:
#Assuming that someObject has method "someMethod"
otherList = []
for someObject in listOfObjects:
try:
if someObject.someMethod() != True:
otherList.append(someObject)
except AttributeError():
# Catch the Error but just let it go, we wouldn't want to append it.
pass
als einfach beiseite, wenn Sie wissen gibt es kein solches Problem mit None
in der Liste gibt es eine schöne Alternative zu der Schleife:
import itertools
import operator
otherList = list(itertools.filterfalse(operator.methodcaller('someMethod'), listOfObjects))
könnte sein, dass Sie filterfalse
von ifilterfalse
mit python2
ersetzen müssen Auch wenn es nur die Elemente behalten wird, die False
zurückgeben und nicht wie Sie != True
angegeben haben, aber ich dachte, dass es eine nette Alternative ist, wenn man bedenkt, dass die Itertools und der Operator schneller als normale Iterationen sind.
Wie instanziieren Sie Ihre 'listOfObjects'? –
Es hat nichts mit 'append' Methode zu tun, Sie haben eine' None' in Ihrer 'listOfObjects' – Selcuk
Sie haben Recht. Danke vielmals! –