【问题标题】:Sha 256 function from hashlib returns NoneTypehashlib 中的 Sha 256 函数返回 NoneType
【发布时间】:2019-08-27 20:03:25
【问题描述】:

我有一个变量 c,其中包含从 tkinters 条目对象获得的字符串。 我想对这个字符串应用一个哈希函数,然后将它传输到其他计算机。

我已经尝试使用 bytes 函数对我的字符串进行编码。

bytes(c)

encode函数

否则我尝试使用“密码学”库并得到同样的错误。

我使用了 hashlib 库并创建了一个包含 #hashlib.sha256() 的变量“digest”。

digest = hashlib.sha256()

比我应用了文档中所说的更新功能。

c = digest.update(c)                      

c = c.digest()

我有一个错误

Exception in Tkinter callback

Traceback (most recent call last):

  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1547, in __call__
    return self.func(*args)
  File "C:\Users\HTTPS\Desktop\registration_form.py", line 79, in register
    c = c.digest()
AttributeError: 'NoneType' object has no attribute 'digest'

【问题讨论】:

  • digest.update(c) 不返回任何内容;它被称为它的副作用,而不是它的返回值。返回None 是它发出信号的方式。
  • 之后我调用了一个“digest”函数。
  • 是的,但是因为您运行了 c = digest.update(c) 并且 digest.update() 返回 None,所以您随后在 None 对象上调用了 digest() 函数。这就是错误消息告诉您NoneType 对象没有digest 的原因——您不再有hashlib.sha256 对象,而是有None 对象,因为您用@987654335 覆盖了您的sha256 对象update() 调用返回的 @ 对象。

标签: python hashlib


【解决方案1】:
c = digest.update(c)                      

...应该只是:

digest.update(c)                      

在 Python 中因其副作用而被调用的操作返回 None,以使调用者清楚地知道它们正在改变调用它们的对象,而不是返回新值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 2023-02-07
    • 2012-08-09
    • 2016-04-29
    • 2012-07-07
    相关资源
    最近更新 更多