Python: цикл с возможными ошибками AttributeErrors
У меня есть массив row
, Я хочу добавить набор атрибутов объекта actor
к массиву. Однако не все актеры имеют каждый из атрибутов.
Я хочу запустить цикл, который добавит атрибут, если он существует, но добавить 'none'
если это не так.
Я не могу найти способ сделать тестирование в цикле, используя либо try
или же hasattr
, Это насколько я понял. Конечно, это не работает, потому что на атрибуты ссылаются вне цикла:
for attribute in [actor.x, actor.y, actor.parent, actor.force, actor.hunger, actor.size]:
try:
row.append(attribute)
except AttributeError:
row.append('none')
Каков наилучший способ сделать это?
1 ответ
for attribute in ['x', 'y', 'parent', 'force', 'hunger', 'size']:
row.append(getattr(actor, attribute, 'none'))
getattr
принимает необязательный третий аргумент, устанавливающий значение по умолчанию, если объект не имеет атрибута.
Некоторые заметки здесь:
Почему некоторым из этих актеров не хватает атрибутов? Должны ли они вместо этого иметь 'none'
или же None
или какое-то другое значение по умолчанию?
Списки строк подвержены ошибкам из-за неявной конкатенации строковых литералов. Это одна из многих веских причин приобрести инструмент для подкладки, если вы его еще не используете.
Ты уверен что хочешь 'none'
по умолчанию? Это может иметь больше смысла в использовании None
или нулевое значение любого типа, которым должны быть атрибуты. (Если они должны быть строками, 'none'
может иметь смысл.)