2013-07-13 12 views
5

Mam dziwny problem. Mam metodę zwracającą wartość logiczną. Z kolei potrzebuję, aby wynik tej funkcji powrócił ponownie, ponieważ nie mogę bezpośrednio wywołać metody z front-endu. Oto mój kod:TypeError (obiekt "bool" nie jest iterable ") podczas próby zwrócenia wartości logicznej

# 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 

ta zgłasza wyjątek: Błąd typu („«bool»obiekt nie iterable”)

Nie rozumiem tego błędu w ogóle, ponieważ ja nie próbując „iterate "wartość bool, tylko aby ją zwrócić.

Jeśli zwrócę łańcuch zamiast boolowskiego lub int, działa on zgodnie z oczekiwaniami. Co może być tutaj problemem?

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

Prześlij cały zwrotny. – zhangyangyu

+0

Zobacz opis dotyczący pełnego śledzenia. – DominicM

Odpowiedz

8

Spójrz na 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 

Twój kod nie jest iteracji wartość, ale kod odbioru jest.

Rozwiązaniem jest: zwrócić wartość iterowalną. Proponuję, abyś przekonwertował bool na ciąg znaków (str(False)) lub zamknął go w krotce ((False,)).

Zawsze czytaj zwrotne: jest poprawne i pomocne.

+0

Metoda łańcuchowa działała, ale jest bardzo frustrująca, ponieważ muszę sprawdzić ciąg znaków, a nie bool w interfejsie użytkownika. Tulepe nie działał, czy to poprawna składnia? [[[return ((Fałsz,))]]]? Ponadto, czy w frameworkach z routingiem często są wymagane typy danych iterowalnych? Jeśli jest to po prostu butelka py, zmieniam stronę na ... – DominicM

+1

@DominicM Nie, nie możesz umieścić oświadczenia na liście (lub w rzeczywistości na trzech listach). Myślę, że to jest wspólny projekt. Jeśli próbujesz przekazać dane do XmlHTTPRequest, proponuję zwrócić AJAX (użyj modułu 'ajax') i użyj biblioteki parsowania ajax po stronie klienta. – Marcin

+0

Sądzę, że jestem przyzwyczajony do tego, że php może po prostu wrócić, a następnie echo true/false. Co masz na myśli przez bibliotekę analizowania ajax? Obecnie używam wywołania javascript/jquery $ .ajax. – DominicM

Powiązane problemy