对于urllib3错误TypeError(f"extend() takes at most 1 positional arguments ({len(args)} given)")的解决
发布时间:2023-01-21 15:30:02
报错的原因urllib出现的原因是代码中使用了extend()函数,而在传入参数时传入了多个参数,而extend()函数只能接受一个参数。如何解决解决这个问题的方法是,将代码中使用的extend()函数改为+= 或者将多个参数使用一个列表或元组组成的单个参数传入。如将extend改为+= [1,2,3] 或者将extend改为如果你不确定传入的参数是什么类型,你可以使用Python内置的itertools.chain()函数将多个参数组合成一个参数传入。这样我们就避免了TypeError的发生。
报错的原因
urllib3出现TypeError("extend() takes at most 1 positional arguments (X given)")的原因是代码中使用了extend()函数,而在传入参数时传入了多个参数,而extend()函数只能接受一个参数。
如何解决
解决这个问题的方法是,将代码中使用的extend()函数改为+= 或者将多个参数使用一个列表或元组组成的单个参数传入。
如将extend([1,2,3])改为+= [1,2,3] 或者将extend(1,2,3)改为extend([1,2,3])
如果你不确定传入的参数是什么类型,你可以使用Python内置的itertools.chain()函数将多个参数组合成一个参数传入。
如:
from itertools import chain
lst = [1, 2, 3]
# lst.extend(4, 5, 6)
# TypeError: extend() takes exactly one argument (3 given)
lst.extend(chain([4], [5], [6]))
print(lst)
# [1, 2, 3, 4, 5, 6]
使用例子
是的,以下是一个使用urllib3库发送请求的例子,在这个例子中我们使用了+= 来避免TypeError:
import urllib3
http = urllib3.PoolManager()
headers = urllib3.util.make_headers(user_agent='myBot/0.0.1')
headers += {'Content-Type': 'application/json'}
url = 'https://example.com'
response = http.request('GET', url, headers=headers)
print(response.data.decode('utf-8'))
这里我们使用了urllib3.util.make_headers()函数来创建一个包含默认请求头的字典,然后使用 += 来添加额外的请求头。这样我们就避免了TypeError的发生。