为何Python中sha256的update方法赋值后会报NoneType属性错误?
问题解析:为何sha256的update方法会触发NoneType错误?
你的问题核心出在对哈希对象update()方法的返回值理解上:
- hashlib中的哈希对象(比如sha256创建的实例)的
update()方法是原地修改当前对象,它的返回值是None,而不是返回更新后的哈希对象本身。
看你注释掉的错误代码行:
d=d.update(b.encode()):print(d.hexdigest())
这里你把update()的返回值(也就是None)重新赋值给了变量d,之后调用d.hexdigest()时,d已经变成了None,自然会抛出AttributeError: 'NoneType' object has no attribute 'hexdigest'。
而正确的写法:
d.update(b.encode());print(d.hexdigest())
不需要重新赋值给d,因为update()已经直接在原哈希对象d上完成了数据更新,后续调用d.hexdigest()操作的还是原来的有效哈希对象,所以能正常运行。
至于你用help(sha256)看到的信息,它只说明了sha256构造函数会返回哈希对象,但没提到update()方法的返回值——因为update()是哈希对象的方法,不是sha256构造函数的内容。这种"原地修改、返回None"的设计是Python中可变对象方法的常见惯例,比如列表的append()、字典的update()也都是类似的逻辑,目的是明确区分原地修改和返回新对象的操作。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

