脚本卡在 try-except 块中

script stuck in try-except block

我目前正在开发一个 Python 脚本,该脚本主要是为 Spotify 曲目抓取给定的 Twitter 帐户,并为找到的曲目创建一个播放列表。该脚本在大多数情况下都可以正常运行,但我正在尝试合并一些错误处理并且 运行 进入某些问题。我要解决的第一个错误是当用户输入无效的 Spotify/Twitter 用户名时。

到目前为止,我已经创建了 2 个单独的 try-except 循环来不断提示用户输入他们的 Twitter 和 Spotify 用户名,直到输入有效的用户名。 Twitter try-except 循环似乎运行正常,但如果输入不正确的用户名,Spotify 循环就会卡住(即不排除有效用户名,并且在输入 ^C 时不会终止)。

Twitter try-except 循环:

# Get request token from Twitter
    reqclient = Twython(consumer_key, consumer_secret)
    reqcreds = reqclient.get_authentication_tokens()

    # Prompt user for Twitter account information until valid account is found
    validated = False
    while validated == False:
        try:
            t_username = input("Please enter your TWITTER username: ")
            user_info = reqclient.show_user(screen_name=t_username)
        # except TwythonError as e:
        except:
            print("Could not find Twitter account " + t_username + ". Please try again.")
            # print(e)
            continue
        else:
            t_user_id = user_info["id"]
            validated = True

Spotify try-except 循环:

    # Create a SpotifyOAuth object to begin authroization code flow
    scope = 'playlist-modify-public playlist-read-collaborative playlist-read-private playlist-modify-private' # Specifies access/user authorization needed to perform request (i.e. create playlist)
    sp_oauth = spotipy.oauth2.SpotifyOAuth(client_id=client_id,client_secret=client_secret,redirect_uri=redirect_uri,scope=scope)

    # Prompt user for Spotify account information until valid account is found
    validated = False
    while validated == False:
        try:
            s_username = input("Please enter your SPOTIFY username: ")
            user_info = sp_oauth.current_user()
        except:
            print("Could not find Spotify account " + s_username + ". Please try again.")
            continue
        else:
            s_user_id = user_info["id"]
            validated = True

我是不是漏掉了什么?我觉得这很明显,但我似乎找不到问题所在(如果是这种情况,我深表歉意)?

这里发生了两件事。

首先,您输入的 s_username 的值实际上从未应用于任何类型的 Spotify API 对象,因此 sp_oauth.current_user() 的结果永远不会改变。

第二个也是更重要的问题是您使用的是一揽子 except 语句,它捕获 所有 异常。这会给您带来问题,因为它还会捕获 KeyboardInterrupt 异常,该异常通常允许您通过按 CTRL-C 退出程序。您应该几乎总是 将捕获的异常缩小到您要处理的特定错误类型。