脚本卡在 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
退出程序。您应该几乎总是 将捕获的异常缩小到您要处理的特定错误类型。
我目前正在开发一个 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
退出程序。您应该几乎总是 将捕获的异常缩小到您要处理的特定错误类型。