Python爬虫类初始化报错:定义__init__传参却提示不接受参数
解决Crawler类实例化参数报错问题
我来帮你排查这个问题!你遇到的class takes no argument, 3 given报错,核心原因是你的Crawler类的__init__方法没有被Python正确识别为类的成员方法,最常见的诱因就是缩进错误,另外你的代码还有几个潜在问题可以一并修复:
1. 直接解决报错:检查缩进规范
Python对缩进极度敏感,如果__init__方法的缩进层级不对,或者混合使用了空格和制表符,Python会把它当成全局函数而非类的成员,导致类没有可接收参数的构造方法。
- 打开PyCharm的空格显示功能:
File → Settings → Editor → General → Appearance,勾选Show whitespaces,这样能直观看到缩进是否统一。 - 确保
__init__方法的缩进和类内其他成员(比如project_name等类变量)保持一致,统一使用4个空格(不要用制表符)。你的代码里__init__的缩进看起来是对的,但一定要确认没有混合缩进的情况。
2. 修复类变量/实例变量的设计问题
你当前在__init__里修改的是类级别变量(比如Crawler.project_name),这意味着所有Crawler实例会共享这些值,这通常不是爬虫类的合理设计(如果后续创建多个爬虫实例,会互相覆盖数据)。建议改成实例变量:
class Crawler: # 如果不需要类共享的变量,可以移除这些定义,或保留作为默认值 def __init__(self, project_name, home_url, site_domain): # 使用self.xxx定义实例专属变量 self.project_name = project_name self.home_url = home_url self.site_domain = site_domain self.file_queue = f"{self.project_name}/links_on_queue.txt" self.file_crawled = f"{self.project_name}/links_crawled.txt" self.starter(self.site_domain) self.crawl_page('first_crawler', self.home_url) # 必须补充定义starter和crawl_page方法,否则实例化时会报错 def starter(self, domain): # 在这里实现starter的逻辑 pass def crawl_page(self, crawler_name, url): # 在这里实现crawl_page的逻辑 pass
3. 验证其他潜在问题
- 确保
starter和crawl_page方法已经在Crawler类中定义:你在__init__里调用了这两个方法,如果它们不存在,修复缩进后会触发新的报错,所以一定要补充实现这两个方法。 - 检查
crawler.py文件是否有其他语法错误:比如未闭合的引号、括号,这些也可能导致Python无法正确解析类结构。
按照上面的步骤调整后,再运行main.py的实例化代码,应该就能解决参数报错问题了。
内容的提问来源于stack exchange,提问作者pastasauce
相关产品推荐
相关产品推荐

