Python django哈希程序为什么使用断言?
我有一个关于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 2Python 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
assert语句是否仅用于开发阶段?或者还有其他原因?多年来,我也开始在代码中添加断言,类似于此 当这样使用时,让代码引发AssertionError而不是导致不满足预期条件的副作用错误可以帮助加快调试
就我个人而言,我认为这些断言在投入生产时没有问题,但这是一个基于单个用例的选择,以及您的代码如何使用、维护等。断言不应在生产中使用,这取决于代码是否针对生产进行了优化 断言是从pyo文件中剥离出来的,其结果是测试时的代码没有经过deployedif优化。这可能会让开发人员措手不及,他们正在使用断言来引发和阻止开发中的进一步执行,以保护上游调用。这在生产中不会受到保护。我想补充一点,在继续之前,您可以在希望确保已达到某个状态的位置使用assert。在这种情况下,您需要确保使用正确的算法对给定密码进行编码。如果算法设置不正确,你宁愿崩溃,也不愿进行错误的密码检查。