{edit} Благодаря agf я понял проблему.Итак, то, что я написал ниже, является хорошим ответом само по себе, но не в связи с вопросом выше ... Я оставлю это здесь для следа.
Глядя на ответы, я, возможно, непонял вопрос.Но вот мое понимание: поскольку args
- это набор аргументов, которые вы даете своей функции, вполне вероятно, что ни один из этих аргументов не является объектом с атрибутом name
.Но, обращая внимание на сообщаемые вами ошибки, вы приводите строковые аргументы.
Может быть, какая-то иллюстрация поможет моему описанию:
>>> # defining a function using name attribute
>>> def f(*args):
... for arg in args:
... print arg.name
>>> # defining an object with a name attribute
>>> class o(object):
... def __init__(self, name):
... self.name = name
>>> # now applying the function on the previous object, and on a string
>>> f( o('arg 1'), 'arg 2' )
arg 1
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
f(o('arg 1'), 'ets')
File "<pyshell#3>", line 3, in f
print arg.name
AttributeError: 'str' object has no attribute 'name'
Это ошибка, поскольку строки не имеют такого атрибута.1011 *
Для меня в вашем коде есть ошибка: вы пытаетесь использовать атрибут name
на своих входах, даже не проверяя, имеют ли они такой атрибут.Возможно, вам следует сначала проверить с помощью hasattr
:
>>> if hasattr(arg, 'name'):
... print arg.name
... else:
... print arg
или с некоторой проверкой входных данных, чтобы убедиться, что это экземпляр заданного класса, у которого, как известно, есть запрошенный атрибут.