gpt4 book ai didi

python - Spotify Python API 调用超时问题

转载 作者:行者123 更新时间:2023-12-05 06:09:21 25 4
gpt4 key购买 nike

我在调用 Spotify API 时遇到以下错误。是否有解决这些超时问题的方法。 Python Spotify Code

TimeoutError Traceback(最后一次调用)C:\ProgramData\Anaconda3\lib\site-packages\urllib3\util\connection.py in create_connection(address, timeout, source_address, socket_options)73 sock.bind(源地址)---> 74 sock.connect(sa)75回力袜

TimeoutError: [WinError 10060] 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应

在处理上述异常的过程中,又发生了一个异常:

KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-11-eb4cef5ffdbb> in <module>
5 #print(artist)
6 #time.sleep(2)
----> 7 result = spotify.search(artist,search_type='artist')['artists']['items']
8 #print(result)
9 try:

<ipython-input-7-6a2d183a2f3a> in search(self, query, search_type)
80 data = urlencode({"q": query, "type": search_type.lower()})
81 lookup_url = f"{endpoint}?{data}"
---> 82 r = requests.get(lookup_url, headers=headers)#.json()
83 if r.status_code not in range(200, 299):
84 return {}

C:\ProgramData\Anaconda3\lib\site-packages\requests\api.py in get(url, params, **kwargs)
74
75 kwargs.setdefault('allow_redirects', True)
---> 76 return request('get', url, params=params, **kwargs)
77
78

C:\ProgramData\Anaconda3\lib\site-packages\requests\api.py in request(method, url, **kwargs)
59 # cases, and look like a memory leak in others.
60 with sessions.Session() as session:
---> 61 return session.request(method=method, url=url, **kwargs)
62
63

C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
528 }
529 send_kwargs.update(settings)
--> 530 resp = self.send(prep, **send_kwargs)
531
532 return resp

C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py in send(self, request, **kwargs)
641
642 # Send the request
--> 643 r = adapter.send(request, **kwargs)
644
645 # Total elapsed time of the request (approximately)

C:\ProgramData\Anaconda3\lib\site-packages\requests\adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
437 try:
438 if not chunked:
--> 439 resp = conn.urlopen(
440 method=request.method,
441 url=url,

C:\ProgramData\Anaconda3\lib\site-packages\urllib3\connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
668
669 # Make the request on the httplib connection object.
--> 670 httplib_response = self._make_request(
671 conn,
672 method,

C:\ProgramData\Anaconda3\lib\site-packages\urllib3\connectionpool.py in _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw)
379 # Trigger any extra validation we need to do.
380 try:
--> 381 self._validate_conn(conn)
382 except (SocketTimeout, BaseSSLError) as e:
383 # Py2 raises this as a BaseSSLError, Py3 raises it as socket timeout.

C:\ProgramData\Anaconda3\lib\site-packages\urllib3\connectionpool.py in _validate_conn(self, conn)
974 # Force connect early to allow us to validate the connection.
975 if not getattr(conn, "sock", None): # AppEngine might not have `.sock`
--> 976 conn.connect()
977
978 if not conn.is_verified:

C:\ProgramData\Anaconda3\lib\site-packages\urllib3\connection.py in connect(self)
306 def connect(self):
307 # Add certificate verification
--> 308 conn = self._new_conn()
309 hostname = self.host
310

C:\ProgramData\Anaconda3\lib\site-packages\urllib3\connection.py in _new_conn(self)
157
158 try:
--> 159 conn = connection.create_connection(
160 (self._dns_host, self.port), self.timeout, **extra_kw
161 )

C:\ProgramData\Anaconda3\lib\site-packages\urllib3\util\connection.py in create_connection(address, timeout, source_address, socket_options)
72 if source_address:
73 sock.bind(source_address)
---> 74 sock.connect(sa)
75 return sock
76

KeyboardInterrupt:

1
###########Create Data frame with required columns to be extracte


[1]: /image/lCaz4.p

最佳答案

我真的希望 spotipy 能在他们的包中解决这个问题,但尽管如此,这是我的解决方法:

  1. 导入错误类型

如果您没有捕捉到这种确切的错误类型,您就会因为让您的捕捉保持开放状态而给自己带来麻烦。例如,如果您的语法中有 TypeError 之类的东西,它会出错并转到您的 catch block ,而您将无法知道它一开始就出错了。

from requests.exceptions import ReadTimeout

  1. 当您初始化 spotipy 客户端时,我建议添加一些可能有用的参数。
spotify = spotipy.Spotify(auth=spotify_token, requests_timeout=10, retries=10)
  • 请求超时 |几秒钟后抛出您正在寻找的相同错误。我使用它只是为了它不会永远挂起,如果 10 秒后没有返回,它只会重试请求。
  • 重试 |如果出现错误,spotipy 将请求的最大重试次数。我认为它默认为 3,所以我只是想增加一点以防万一。
  1. 运行 try/except 类型的重试系统

如果它一直挂起,您绝对可以扩展它以使其不断重试(使用 while 循环或其他东西),但这是基本思想:

try:

result = spotify.search(artist,search_type='artist')['artists']['items']

except ReadTimeout:

print('Spotify timed out... trying again...')
result = spotify.search(artist,search_type='artist')['artists']['items']

关于python - Spotify Python API 调用超时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64815194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com