>

flask-python에서 간단한 게시물 API를 만들려고하지만이 오류가 발생합니다 :

TypeError: list object is not an iterator

하지만 코드를 수정하면 문제가 될 수있는 것 같습니다.

특히 문제가있는 기능 :

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

우체부에 무언가를 게시하려고하면이 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 -

NB :

30 행은 아래 행입니다.

item = next(filter(lambda x: x['name'] == name, items), None)

  • 답변 # 1

    iter() 를 사용해보십시오

    예 :

    item = next(iter(filter(lambda x: x['name'] == name, items)), None)
    
    

  • 답변 # 2

    @Rakesh의 답변을 자세히 설명하기 위해 목록은 반복자가 아니며 filter() 의 결과입니다.  파이썬 2에서 목록입니다. 이 문제를 해결하려면 iter() 를 사용하십시오.  문제 목록에 해당하는 반복자를 출력하여 next()  적절하게 호출 할 수 있습니다. 그런 다음 동일한 코드로 문제를 해결해야합니다.

    item = next(iter(filter(lambda x: x['name'] == name, items)), None)
    
    

    iter() 사용에 유의하십시오.  반복자에서 파이썬 3에서도 여전히 작동 하므로이 코드는 호환됩니다.

관련 자료

  • 이전 c# - TableLayoutPanel 내부에서 PictureBoxDrawImage를 처리 할 수 ​​없습니다
  • 다음 파일 복사 프로그램에서 EOF에 도달하지 않고 Enter 키를 눌러 출력하는 이유는 다음과 같습니다"THE C PROGRAMMING LANGUGE BY DENNIS RITCHIE"