您的位置:

对于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的发生。