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

Python用类定义实现系统文件扫描报参数缺失错误如何解决?

错误根因
  • 你将方法调用的代码写在了QuickScan类的定义内部,属于类作用域下的代码,执行逻辑顺序错误
  • get_all_abs_paths是类的实例方法,第一个参数self需要绑定类的实例对象,不能直接调用未绑定实例的方法。你直接传路径参数时,Python会把这个路径识别为self参数,自然会提示缺少rootdir参数。
修复方案

修复后的完整代码如下:

import hashlib
import os.path
import os

class QuickScan:
    def md5(self,fname):
        hash_md5 = hashlib.md5()
        try:
            with open(fname, "rb") as f:
                for chunk in iter(lambda: f.read(2 ** 20), b""):
                    hash_md5.update(chunk)
        except Exception:
            pass
        return hash_md5.hexdigest()

    def get_all_abs_paths(self,rootdir):
        # 用with上下文管理自动关闭病毒库文件,避免资源泄漏
        with open('C:/FYP/SecuCOM2022/virusshare.md5.txt','rt', encoding='utf-8') as viruslist:
            virusinside = [l.rstrip() for l in viruslist]
        paths = list()
        virus="detected"
        novirus="clear"
    
        for dirpath,_,filenames in os.walk(rootdir):
            for f in filenames:
                paths.append(os.path.abspath(os.path.join(dirpath, f)))

        for filename in paths:
            # 单个文件只计算一次MD5,减少IO开销
            file_md5 = self.md5(filename)
            print(filename, file_md5)
            if file_md5 in virusinside:
                print(virus)
                os.remove(filename)
            else:
                print(novirus)
        

# 调用代码移到类定义外部,先实例化类再调用方法
if __name__ == "__main__":
    scanner = QuickScan()
    filenames = scanner.get_all_abs_paths('C:/Users/User/Desktop/irustesting')
额外说明

新增的if __name__ == "__main__":代码块作用是避免当前脚本被其他Python文件导入时,自动执行扫描逻辑,只在直接运行当前脚本时才执行扫描。

内容的提问来源于stack exchange,提问作者Jun Jie Ong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:06:02