为何Python中request()函数报参数错误,疑似被识别为字典get()?
问题解决:requests request()函数参数传递错误
问题描述
requests库本身使用正常,但自定义的Business类函数中出现报错,报错提示TypeError: request() takes 2 positional arguments but 5 were given。
原代码
import requests from requests import request class Business: def __init__(self, url, api_key): self.url = url self.api_key = api_key def send_valid_request(self, category, location): headers = {'Authorization': 'Bearer ' + api_key} params = {'term': category, 'location': location} response = request('GET', url, params, None, headers) # ^^ # 错误位置 ^^ businesses = response.json()['businesses'] return businesses def see_original_name(self, business_name, category, location): businesses = self.send_valid_request(category, location) ... category = input(f'Choose the business category: ') location = input(f'Choose your business location: ') url = '...' api_key = '...' business = Business(url, api_key) while True: question = input( 'What do you want to know? (choose: name search(NS)/general search(GS)) ') if question == 'NS': while True: business_name = input('Buisness name: ') business.see_original_name(business_name, category, location) ...
报错信息
Traceback (most recent call last): File ".../mainapp.py", line ..., in <module> business.see_original_name(business_name, category, location) File ".../mainapp.py", line 20, in see_original_name businesses = self.send_valid_request(category, location) File ".../mainapp.py", line 15, in send_valid_request response = request('GET', url, params, None, headers) TypeError: request() takes 2 positional arguments but 5 were given
错误原因及修正方案
1. 实例属性未正确引用
方法内直接使用api_key和url是错误的,这两个是类实例的属性,必须通过self.api_key和self.url访问,否则会触发未定义变量的错误。
2. request()函数参数传递错误
requests库的request()函数签名为request(method, url, **kwargs),只有前两个参数(请求方法、URL)是位置参数,其余参数(params、headers等)都需要通过关键字参数传递,不能直接作为位置参数传入。你传入的params、None、headers都被当成了位置参数,导致参数数量超出预期。
修正后的关键代码
def send_valid_request(self, category, location): # 正确引用实例属性 headers = {'Authorization': 'Bearer ' + self.api_key} params = {'term': category, 'location': location} # 使用关键字参数传递params和headers,默认值为None的参数可省略 response = request('GET', self.url, params=params, headers=headers) businesses = response.json()['businesses'] return businesses
补充说明
你之前的猜测错误,这个问题和字典的get()函数无关,纯粹是requests库的request()函数参数使用方式错误。
内容的提问来源于stack exchange,提问作者Code7G
相关产品推荐
相关产品推荐

