Python中如何将函数参数作为hashlib模块的属性动态调用
问题解答
这个需求完全可以实现,你现有代码的问题在于hashlib.hash()是直接尝试调用hashlib模块中名为hash的固定方法,并不会读取你传入的hash参数对应的字符串值,需要用Python内置的getattr()函数动态获取对应算法的构造方法。
修正后可运行的代码
import hashlib def calculate_file_hash(malware, hash_algorithm): # 动态获取hashlib对应的算法构造函数 hash_func = getattr(hashlib, hash_algorithm) h = hash_func() with open(malware,'rb') as f: chunk = b'' while True: chunk = f.read(1024) if not chunk: break h.update(chunk) return h.hexdigest() # 调用示例 file = "待计算哈希的文件路径" sha1_val = calculate_file_hash(file, 'sha1') sha256_val = calculate_file_hash(file, 'sha256')
优化说明
- 调整了函数名和参数名,避免和Python内置的
hash()函数、参数重名导致的冲突问题 - 修正了原有代码中
chunk = 0的初始值错误,整数和字节串的比较逻辑不严谨,修改后的循环逻辑更可靠 - 若需要增加参数合法性校验,可以在获取构造函数前增加如下判断:
可以避免传入不存在的算法名时抛出属性异常。if hash_algorithm not in hashlib.algorithms_available: raise ValueError(f"不支持的哈希算法:{hash_algorithm}")
内容的提问来源于stack exchange,提问作者Medling
相关产品推荐
相关产品推荐

