Python 如何修复';非类型';对象没有属性';json';在递归函数中

Python 如何修复';非类型';对象没有属性';json';在递归函数中,python,json,list,Python,Json,List,在行idList.append(response.json()[0]['id'])上,我得到了一个错误'NoneType'对象没有属性“json”,我不知道为什么。您似乎想要10个唯一的随机笑话。我不使用递归,而是使用循环(迭代10个笑话)和集合(跟踪重复ID): 而不是无关紧要的 json.decoder.JSONDecodeError:预期值:第1行第1列(字符0) 遵循snake\u case的建议,而不是camelCase和操作符周围的间距,foo=bar=>foo=bar 当向同

在行
idList.append(response.json()[0]['id'])
上,我得到了一个错误
'NoneType'对象没有属性“json”
,我不知道为什么。

您似乎想要10个唯一的随机笑话。我不使用递归,而是使用循环(迭代10个笑话)和集合(跟踪重复ID):

而不是无关紧要的

json.decoder.JSONDecodeError:预期值:第1行第1列(字符0)
  • 遵循
    snake\u case
    的建议,而不是
    camelCase
    和操作符周围的间距,
    foo=bar
    =>
    foo=bar

  • 当向同一域发出多个请求时,使用可加快速度(读者练习)


  • 如果它是非类型,则您的请求可能失败或未返回任何内容。
    getJoke(idList)
    =>
    返回getJoke(idList)
    。这是一个非常奇怪的递归用例。。。如果您能分享您的问题/预期结果,我们可能会提供更好的方法。
    def getJoke(idList):
        joke=requests.get("https://official-joke-api.appspot.com/jokes/programming/random")
        if(joke.json()[0]['id'] in idList):
            getJoke(idList)
        else:
            return joke
    
    idList=[]
    for i in range(10):
        response=getJoke(idList)
        idList.append(response.json()[0]['id'])
        print('Setup: '+response.json()[0]['setup']+'\nPunchline: '+response.json()[0]['punchline']+'\n')
    
    
    import requests
    
    def get_joke(
        url="https://official-joke-api.appspot.com/jokes/programming/random"
    ):
        response = requests.get(url)
        response.raise_for_status()
        return response.json()[0]
        
    def get_unique_random_jokes(n):
        ids_used = set()
        jokes = []
    
        while len(jokes) < n:
            joke = get_joke()
    
            if joke["id"] not in ids_used:
                ids_used.add(joke["id"])
                jokes.append(joke)
    
        return jokes       
    
    if __name__ == "__main__":
        jokes = get_unique_random_jokes(n=10)
    
        for joke in jokes:
            print(f'Setup: {joke["setup"]}\nPunchline: {joke["punchline"]}\n')