我试图在flask-python中创建一个简单的post api,但是我收到了这个错误:
TypeError: list object is not an iterator
Run Code Online (Sandbox Code Playgroud)
但当我修改我的代码似乎很好可能是什么问题.
我的功能特别有问题:
def post(self,name):
#return {'message': name}
item = next(filter(lambda x: x['name'] == name, items), None)
if item:
return {'message':"An item with name '{}' already exixts. ".format(name)},400
data = request.get_json()
item = {'name': name, 'price':data['price']}
items.append(item)
return item, 201
Run Code Online (Sandbox Code Playgroud)
当我尝试在邮递员上发布某些内容时,我收到此logcat 错误:
[2018-06-07 10:41:02,849] ERROR in app: Exception on /item/test [POST]
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Python27\lib\site-packages\flask\app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Python27\lib\site-packages\flask_restful\__init__.py", line 480, in wrapper
resp = resource(*args, **kwargs)
File "C:\Python27\lib\site-packages\flask\views.py", line 84, in view
return self.dispatch_request(*args, **kwargs)
File "C:\Python27\lib\site-packages\flask_restful\__init__.py", line 595, in dispatch_request
resp = meth(*args, **kwargs)
File "G:\flask_workspace\MealBookingApp\MealBookingApp\MealBookingApp\views.py", line 30, in post
item = next(filter(lambda x: x['name'] == name, items), None)
TypeError: list object is not an iterator
127.0.0.1 - - [07/Jun/2018 10:41:02] "POST /item/test HTTP/1.1" 500 -
Run Code Online (Sandbox Code Playgroud)
注意:
第30行,是下面的行:
item = next(filter(lambda x: x['name'] == name, items), None)
Run Code Online (Sandbox Code Playgroud)
要详细说明@ Rakesh的答案,列表不是迭代器,filter()Python 2中的输出是一个列表.要解决此问题,您可以使用该iter()函数输出与有问题的列表对应的迭代器,以便next()可以适当地调用它.然后相同的代码应该解决您的问题:
item = next(iter(filter(lambda x: x['name'] == name, items)), None)
Run Code Online (Sandbox Code Playgroud)
请注意,iter()在迭代器上使用仍然可以在Python 3中使用,因此此代码是向前兼容的.
尝试使用 iter()
例如:
item = next(iter(filter(lambda x: x['name'] == name, items)), None)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5941 次 |
| 最近记录: |