2013-07-13 20 views
5

У меня возникла странная проблема. У меня есть метод, который возвращает логическое значение. В свою очередь мне нужен результат этой функции, возвращенный снова, поскольку я не могу напрямую вызвать метод из front-end. Вот мой код:TypeError (объект «bool» не является итерируемым »,) при попытке вернуть Boolean

# this uses bottle py framework and should return a value to the html front-end 
@get('/create/additive/<name>') 
def createAdditive(name): 
    return pump.createAdditive(name) 



def createAdditive(self, name): 
     additiveInsertQuery = """ INSERT INTO additives 
            SET   name = '""" + name + """'""" 
     try: 
      self.cursor.execute(additiveInsertQuery) 
      self.db.commit() 
      return True 
     except: 
      self.db.rollback() 
      return False 

Это бросает исключение: TypeError («„BOOL“объект не итерация»,)

Я не получаю эту ошибку вообще, так как я не пытаюсь «итерация "значение bool, только чтобы вернуть его.

Если я возвращаю строку вместо логического или int, она работает как ожидалось. Что может быть проблемой здесь?

Traceback:

Traceback (most recent call last): 
    File "C:\Python33\lib\site-packages\bottle.py", line 821, in _cast 
    out = iter(out) 
TypeError: 'bool' object is not iterable 
+2

Опубликовать весь трасчет пожалуйста. – zhangyangyu

+0

См. Редактирование для полной трассировки. – DominicM

ответ

8

Посмотрите на TRACEBACK:

Traceback (most recent call last): 
    File "C:\Python33\lib\site-packages\bottle.py", line 821, in _cast 
    out = iter(out) 
TypeError: 'bool' object is not iterable 

Вашего код не перебор значения, но код приема он.

Решение: возвратить итерируемое. Я предлагаю вам либо преобразовать bool в строку (str(False)), либо заключить ее в кортеж ((False,)).

Всегда читайте трассировку: это правильно, и это полезно.

+0

Метод String работал, но очень расстраивает, поскольку я должен проверить строку, а не bool в интерфейсе. Туле не работал, это правильный синтаксис? [[[return ((False,))]]]? Кроме того, общепринято для фреймворков с маршрутизацией требовать повторяющиеся типы данных? Если это просто что-то бутылочное py, я бы переключился на web py ... – DominicM

+1

@DominicM Нет, вы не можете поместить утверждение внутри списка (или, фактически, три списка). Я думаю, что это общий дизайн. Если вы пытаетесь передать данные в XmlHTTPRequest, я предлагаю вам вернуть AJAX (использовать модуль 'ajax') и использовать библиотеку разбора ajax на стороне клиента. – Marcin

+0

Я предполагаю, что я привык к тому, что php может просто вернуться, тогда echo true/false. Что вы понимаете под ajax parsing library? В настоящее время я использую javascript/jquery $ .ajax call. – DominicM