在循环崩溃时,因为HTTP请求后不存在键值对

时间:2019-04-04 13:13:25

标签: python json key-value

我有一个从GitHub API获取信息的功能。

问题是,如果包含UserRepo的API不存在,它将返回{message , "Not Found"}

因此,我正在运行一个while loop,它一直在查找,直到正确输入了用户名和存储库为止,因此API返回正确的信息。

问题在于,如果正确,while循环就会中断,因为message键不再存在

githubuser = input("GitHub Username: ")
githubrepo = input("GitHub Repo: ")
r = requests.get("https://api.github.com/repos/" + githubuser + "/" + githubrepo)
data = json.loads(r.content)
class User:
    def __init__(self, json_def):
        self.__dict__ = data
user = User(data)

while user.message:
    print("User or Repository not found, please re-enter...")
    githubuser = input("GitHub Username: ")
    githubrepo = input("GitHub Repo: ")
    r = requests.get("https://api.github.com/repos/" + githubuser + "/" + githubrepo)
    data = json.loads(r.content)
   user = User(data)

有没有一种方式可以使我有一个while语句,那就是当user.message不再存在时,它也不会因错误AttributeError: 'User' object has no attribute 'message'

而崩溃

我已经尝试实现while user.message != None,但是那也不起作用。

2 个答案:

答案 0 :(得分:0)

如何以这种方式构造代码?

class User:
    def __init__(self, data):
        self.__dict__ = data

user = User({})
while(true):
    githubuser = input("GitHub Username: ")
    githubrepo = input("GitHub Repo: ")
    r = requests.get("https://api.github.com/repos/" + githubuser + "/" + githubrepo)
    data = json.loads(r.content)
    if "message" in data.keys():
       continue
    else:
      user = User(data)
      break

答案 1 :(得分:0)

尝试使用:

if hasattr(user, 'message'):
    # user.message here

在您的问题中按如下方式使用它:

...
r = requests.get("https://api.github.com/repos/" + githubuser + "/" + githubrepo)
data = json.loads(r.content)
user = User(data)
if not hasattr(user, 'message'):
    break