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

While Loop Crashing because Key-Value pair doesn't exist after HTTP Request

我有一个从 GitHub API.

中获取信息的函数

问题是,如果 API,其中包括 UserRepo 不存在 returns {message , "Not Found"}

所以我 运行 一个 while loop 一直在寻找,直到正确输入用户名和 repo,所以 API returns 是正确的信息。

问题是,当它正确时,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 但也没有用。

以这种方式构建代码怎么样?

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

尝试使用:

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