You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:15:40