Python django哈希程序为什么使用断言?

Python django哈希程序为什么使用断言?,python,django,django-authentication,Python,Django,Django Authentication,我有一个关于Django哈希器实现的问题。它们都实现了verify方法,并且正在执行assert算法==self.algorithm 我知道可以通过将标志-O传递给生产代码上的Python解释器来禁用断言 例如,BCryptSHA256PasswordHasher实现如下验证: def verifyself,密码,编码: 算法,salt,hash=encoded.split'$',2 断言算法==self.algorithm encoded_2=self.encodepassword,salt

我有一个关于Django哈希器实现的问题。它们都实现了verify方法,并且正在执行assert算法==self.algorithm

我知道可以通过将标志-O传递给生产代码上的Python解释器来禁用断言

例如,BCryptSHA256PasswordHasher实现如下验证:

def verifyself,密码,编码: 算法,salt,hash=encoded.split'$',2 断言算法==self.algorithm encoded_2=self.encodepassword,salt 返回常数\u时间\u比较编码,编码\u 2
assert语句是否仅用于开发阶段?或者还有其他原因?

多年来,我也开始在代码中添加断言,类似于此

当这样使用时,让代码引发AssertionError而不是导致不满足预期条件的副作用错误可以帮助加快调试


就我个人而言,我认为这些断言在投入生产时没有问题,但这是一个基于单个用例的选择,以及您的代码如何使用、维护等。

断言不应在生产中使用,这取决于代码是否针对生产进行了优化

断言是从pyo文件中剥离出来的,其结果是测试时的代码没有经过deployedif优化。这可能会让开发人员措手不及,他们正在使用断言来引发和阻止开发中的进一步执行,以保护上游调用。这在生产中不会受到保护。

我想补充一点,在继续之前,您可以在希望确保已达到某个状态的位置使用assert。在这种情况下,您需要确保使用正确的算法对给定密码进行编码。如果算法设置不正确,你宁愿崩溃,也不愿进行错误的密码检查。