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

调用其他类方法触发TypeError:crawl()仅接受1个参数却传入2个

解决 TypeError: crawl() takes 1 positional argument but 2 were given

这个错误原因很直白——你定义的crawl方法只接受1个参数(类实例方法默认的self,用来指代当前实例本身),但调用时你手动传了额外的web参数,加上Python自动传入的实例本身,总共传了2个参数,自然就触发了参数数量不匹配的报错。

两种解决思路,根据你的实际需求选择:

1. 如果WebCrawler自身已具备可用的Web实例

你看你的WebCrawler类里已经初始化了web = Web()这个类属性,说明该类本身已经有可用的Web对象了。这种情况下调用时完全不需要额外传参,直接修改调用代码即可:

from web import Web
from crawler import WebCrawler
crawler = WebCrawler()
urls = crawler.crawl()  # 移除多余的web参数
print(urls)

2. 如果crawl方法确实需要外部传入的Web实例

那你得修改WebCrawler类里的crawl方法定义,新增对应的参数:

from web import Web
import ast
class WebCrawler:
    # 若不需要类共享的web实例,可删除此行
    # web = Web()
    def crawl(self, web):  # 新增web参数
        root = self.root()
        # 注意:如果get方法需要用到传入的web实例,记得同步调整调用逻辑
        URL = ast.literal_eval(self.get(root))
        return URL

修改后,crawler.crawl(web)的调用方式就合法了。

另外提个小细节:你当前的web = Web()是类属性,所有WebCrawler实例会共享同一个Web对象。如果每个爬虫实例需要独立的Web实例,建议把它移到__init__方法里变成实例属性:

class WebCrawler:
    def __init__(self):
        self.web = Web()  # 每个实例拥有独立的web对象
    def crawl(self):
        root = self.root()
        URL = ast.literal_eval(self.get(root))
        return URL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:27:42