2015-10-05 1 views
0

Когда я удалил удобство api, возникает проблема TypeError: 'int' object is not iterable и указывает на эту строку id, = args[0] ... как я могу это исправить? Является ли проблема, которую я назначаю args [0], похожую на этот вопрос Stacks?Метод Retrieve, предоставляющий TypeError: объект «int» не является итерируемым

КОД:
object.py(родительский класс)

def retrieve_assessment_result(self, *args): 
    id, owner, assessment = None, None, None 
    if len(args) == 1: 
     id, = args[0] 
    elif len(args) == 2: 
     owner, assessment = args 
     print 'testa', owner, assessment, id 
    else: 
     raise ValueError('Value being passed is an object') 
    if id is not None: 
     print 'testi', id 
     return self.session.query(Assessment_Result).\ 
     filter(Assessment_Result.id == id).one() 
    elif owner is not None: 
     print 'testo', owner 
     return self.session.query(Assessment_Result).\ 
     filter(Assessment_Result.owner == owner).one() 
    elif assessment is not None: 
     print 'testa', assessment 
     return self.session.query(Assessment_Result).\ 
     filter(Assessment_Result.assessment == assessment).one() 

convenience.py(дочерний класс)

def retrieve_assessment_result(self, username, name): 
    owner = self.retrieve_user(username) 
    assessment = self.retrieve_assessment(name) 
    return super(ConvenienceAPI, self).retrieve_assessment_result(owner, assessment) 

TraceBack на вопрос 2: (когда я удалил класс ребенка, чтобы проверить ID в одиночку)

... 
    File "/usr/local/lib/python2.7/site-packages/pyramid-1.5.7-py2.7.egg/pyramid/config/views.py", line 501, in _requestonly_view 
    response = view(request) 
    File "/Users/ack/code/venv/NotssWEB/notssweb/views/views.py", line 368, in get_assessment_result 
    assessment_result = api.retrieve_assessment_result(assessment_result_id) 
    File "/usr/local/lib/python2.7/site-packages/notssdb/api/object.py", line 313, in retrieve_assessment_result 
    id, = args[0] # <-- this the issue? see object.py above 
TypeError: 'int' object is not iterable 
+0

'id,' означает кортеж, и он пытается распаковать 'int' –

+1

. Это должно быть просто' id = args [0] ' – donkopotamus

ответ

1

Вы используете назначение кортеж; вы пытаетесь назначить одно целое на кортежа целей. Даже с одной мишенью, для которой требуется ваше правое выражение для создания последовательности с равным количеством элементов.

Либо удалить запятой, удалить [0] нарезку, или добавить запятую в правой стороне, чтобы сделать его кортеж, а также:

id = args[0] 

или

id, = args 

или

id, = args[0], 

но последний вариант является довольно неэффективной версией первого.

+0

Благодарим вас за объяснение Martjin! Делает понимание намного проще :) Любые мысли о том, как подойти к первому вопросу? – thesayhey

+0

@thesayhey: Я не вижу, что я следую тому, что ваш первый вопрос пытается спросить. –

+0

Я обновил вопрос выше. Извините за отсутствие ясности. – thesayhey