2013-07-13 30 views
5

Tôi đang gặp sự cố lạ. Tôi có một phương thức trả về một boolean. Đổi lại tôi cần kết quả của hàm đó được trả về một lần nữa vì tôi không thể gọi trực tiếp phương thức từ front-end. Dưới đây là mã của tôi:LoạiError ("đối tượng" bool "không thể lặp lại",) khi cố gắng trả về 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 

này ném một ngoại lệ: Loại lỗi (" 'bool' đối tượng không phải là iterable",)

Tôi không nhận được lỗi này ở tất cả vì tôi không cố gắng "lặp "giá trị bool, chỉ để trả lại.

Nếu tôi trả về một chuỗi thay vì boolean hoặc int nó hoạt động như mong đợi. Điều gì có thể là một vấn đề ở đây?

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

Hãy đăng toàn bộ lượt truy nguyên. – zhangyangyu

+0

Xem chỉnh sửa để truy cập đầy đủ. – DominicM

Trả lời

8

Nhìn vào 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 

Mã của bạn không lặp lại những giá trị, nhưng mã nhận nó được.

Giải pháp là: trả về một lần lặp lại. Tôi đề nghị bạn chuyển đổi bool thành một chuỗi (str(False)) hoặc đính kèm nó trong một bộ ((False,)).

Luôn đọc truy nguyên: chính xác và hữu ích.

+0

Phương thức String hoạt động nhưng rất bực bội vì tôi phải kiểm tra chuỗi không phải là bool trong front-end. Tulepe không hoạt động, cú pháp này có chính xác không? [[[trở lại ((Sai,))]]]? Ngoài ra, nó có phổ biến cho các khung công tác định tuyến để yêu cầu các kiểu dữ liệu có thể lặp lại không? Nếu nó chỉ là một cái gì đó chai py nào tôi sẽ chuyển sang web py ... – DominicM

+1

@DominicM Không, bạn không thể đặt một tuyên bố bên trong một danh sách (hoặc trên thực tế, ba danh sách). Tôi nghĩ đây là một thiết kế chung. Nếu bạn đang cố truyền dữ liệu cho XmlHTTPRequest, thì tôi đề nghị bạn trả về AJAX (sử dụng mô-đun 'ajax') và sử dụng thư viện phân tích cú pháp ajax ở phía máy khách. – Marcin

+0

Tôi đoán tôi đang sử dụng để php có thể chỉ đơn giản là quay trở lại sau đó echo true/false. Bạn có ý nghĩa gì bởi thư viện phân tích cú pháp ajax? Tôi hiện đang sử dụng javascript/jquery $ .ajax call. – DominicM

Các vấn đề liên quan