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

Python代码出现keyword argument repeated语法错误,如何修复?

问题分析与修复:HTTP请求类的「keyword argument repeated」错误

错误原因

你代码里所有HTTP请求方法(GET/POST/PUT/PATCH/DELETE)的调用都重复传递了headers关键字参数,比如在requests.delete里同时写了headers=headers和headers={'User-Agent': agent,'Referer': ref}。Python语法禁止同一个函数调用中重复使用相同的关键字参数,这就是触发「keyword argument repeated」错误的直接原因——不止第59行的DELETE请求,其他方法调用也存在同样问题。

修复方案

需要合并请求头参数,而不是重复传递。逻辑是:

  1. 先初始化一个基础请求头字典,优先使用传入的headers或实例的self.header
  2. 再将User-Agent和Referer合并到这个字典中(如果存在的话),避免覆盖原有请求头的其他字段

同时还要修复代码里的其他隐性问题:

  • 缺少time模块导入(代码中使用了time.sleep但未导入)
  • 主函数中错误调用实例方法:Requester.request是实例方法,需先创建类实例再调用
  • status_cod拼写错误,应为status_code
  • 代理参数格式错误:requests要求proxies是字典格式(如{'http': 'xxx', 'https': 'xxx'}),当前代码直接传列表会报错

完整修正代码

import random
import requests
import time  # 补充缺失的time模块导入

# FileHanlder & DataHandler is a some other supporting class

class Requester:
    """A class for making HTTP requests."""

    def __init__(self, agent=None, header=None, proxy=None, ref=None, ref_file=None, proxy_file=None, agent_file=None, set_agent=False, set_header=False, set_ref=False, set_proxy=False, break_pt=None):
        self.agent = 0
        self.ref = 0
        self.proxy = 0
        self.header = header or {}  # 初始化为空字典,避免后续合并出错
        self.break_pt = break_pt

        if agent_file is not None:
            self.agent = FileHandler.read(agent_file)
        elif set_agent:
            self.agent = agent
        else:
            self.agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'

        if ref_file is not None:
            self.ref = FileHandler.read(ref_file).split('\n')
        elif set_ref:
            self.ref = ref

        if proxy_file is not None:
            self.proxy = FileHandler.read(proxy_file).split('\n')
        elif set_proxy:
            self.proxy = proxy

    def request(self, url, method='get', params=None, data=None, json=None, headers=None, cookies=None, timeout=5, redirect=True, verify=True, proxy=None, ref=None, agent=None, break_pt=None):
        # 处理请求间隔
        if break_pt is None:
            break_pt = self.break_pt
        if break_pt is not None:
            time.sleep(random.uniform(break_pt[0], break_pt[1]))

        # 优先使用传入参数,否则用实例属性
        current_agent = agent or self.agent
        current_ref = ref or self.ref
        current_proxy = proxy or self.proxy
        # 合并请求头:先取传入的headers,没有则用实例的header,再添加User-Agent和Referer
        current_headers = headers or self.header.copy()
        if current_agent:
            current_headers['User-Agent'] = current_agent
        if current_ref:
            current_headers['Referer'] = current_ref

        # 处理代理格式(示例,需根据实际代理字符串调整)
        proxies = None
        if current_proxy:
            # 假设代理是单个字符串,如"http://xxx:port",需根据实际情况调整
            proxies = {'http': current_proxy, 'https': current_proxy}

        # 统一调用请求方法,避免重复代码
        try:
            req_method = getattr(requests, method.lower())
            ret = req_method(
                url,
                params=params,
                data=data,
                json=json,
                headers=current_headers,
                cookies=cookies,
                timeout=timeout,
                allow_redirects=redirect,
                verify=verify,
                proxies=proxies
            )
            return ret
        except AttributeError:
            raise ValueError(f"Unsupported HTTP method: {method}")

if __name__ == '__main__':
    # 创建Requester实例
    requester = Requester()
    # 调用request方法
    response = requester.request('https://www.google.com/')
    print('ok' if response.status_code == 200 else 'failed')

关键优化点

  • 移除重复的headers参数,改为合并字典的方式传递
  • 使用getattr(requests, method.lower())统一处理请求方法,减少重复代码
  • 修复代理参数的格式问题,符合requests库的要求
  • 修正主函数中的实例调用和拼写错误
  • 初始化self.header为空字典,避免合并时出现None类型错误

内容的提问来源于stack exchange,提问作者coderooz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:35:19