Python调用COVID-19 API每日更新时遇TypeError参数错误求助
解决TypeError: request()参数数量不匹配的问题
问题描述
我正在尝试编写Python代码,每日向COVID-19 API发送GET请求,获取卡塔尔的新冠确诊病例实时数据。但当我添加today变量后,触发了这个错误:TypeError: request() takes from 3 to 5 positional arguments but 6 were given。以下是我的代码:
import http.client import mimetypes today = datetime.today() today = today.isoformat() conn = http.client.HTTPSConnection("api.covid19api.com") payload = '' headers = {} conn.request("GET", "/live/country/qatar/status/confirmed/date/",today, payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
解决方案
嘿,这个问题其实是你对http.client.HTTPSConnection.request()方法的参数传递方式搞错啦!让我一步步帮你修正:
1. 错误根源
request()方法的正确参数签名是:request(method, url, body=None, headers={})——它最多只接受4个位置参数(包含方法自身的self的话是5个,但我们调用时只需要传前4个),而你错误地把today当成独立参数传递,导致总参数数超标。你真正需要做的是把today拼接在请求URL的末尾,作为路径的一部分。
2. 修正后的完整代码
另外我还发现你漏导入了datetime模块,这也会触发运行错误,一起补上:
import http.client import datetime # 补上遗漏的datetime模块导入 import mimetypes # 简化日期格式的代码写法 today = datetime.today().isoformat() conn = http.client.HTTPSConnection("api.covid19api.com") payload = '' headers = {} # 把today变量拼接进请求URL中,而不是单独传参 request_url = f"/live/country/qatar/status/confirmed/date/{today}" conn.request("GET", request_url, payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
3. 额外优化提示
- 如果你没有用到
mimetypes模块的功能,可以直接删掉这个导入语句,让代码更简洁。 - 注意API对日期格式的要求,
isoformat()生成的格式刚好符合大多数REST API的日期参数规范,不用额外调整。
这样修改后,参数数量就符合方法要求了,也能正确传递日期参数给API,应该就能正常获取数据啦!
内容的提问来源于stack exchange,提问作者Hussain Alyafei
相关产品推荐
相关产品推荐

