Python 是';优化'。pyo文件不安全?

Python 是';优化'。pyo文件不安全?,python,Python,我惊恐地发现python-O去掉了assert语句。我在任何地方都使用断言,我认为断言(就像一般的例外)是一种流控制形式 Python人:Python-O和.pyo文件被认为是安全的吗?依赖断言是不安全的吗?断言是用来捕获bug的,而不是用于流控制。因此,对于一个乐观主义者来说,去掉它们是完全有效的,因为当你的代码发布时,这些bug应该已经被删除了 如果您将它们用作一般用途的异常引发器,我建议您使用它们是错误的 上有一个很好的页面讨论了这一点,我特别指出最后一点: 断言只能用于程序的自检的一个重

我惊恐地发现
python-O
去掉了assert语句。我在任何地方都使用断言,我认为断言(就像一般的例外)是一种流控制形式


Python人:
Python-O
.pyo
文件被认为是安全的吗?依赖断言是不安全的吗?

断言是用来捕获bug的,而不是用于流控制。因此,对于一个乐观主义者来说,去掉它们是完全有效的,因为当你的代码发布时,这些bug应该已经被删除了

如果您将它们用作一般用途的异常引发器,我建议您使用它们是错误的

上有一个很好的页面讨论了这一点,我特别指出最后一点:

断言只能用于程序的自检的一个重要原因是可以在编译时禁用断言。

如果Python是以-O选项启动的,那么断言将被剥离,而不是进行计算。所以,如果代码大量使用断言,但性能至关重要,那么在发布版本中有一个系统可以关闭它们


依靠资产不是一个好主意。使用断言作为流控制不是一个好主意。原因正如你所描述的:它们可以被禁用。政府简单地说:

Assert语句是将调试断言插入程序的一种方便方法


断言是用于调试的,在生产代码中不可依赖。

你说的“安全”是什么意思?与在C中检查缓冲区长度的含义相同。“不安全”编码会导致未指定的行为,在某些情况下,还会导致安全漏洞。
python-O
被认为是安全的。如果将关键控制流放入断言中,则会使
python-O
不安全,这是不好的。
assert
应该只用于测试。@JBernardo为什么只用于测试?好的,但wiki的下一行是“但除非真的有必要,否则不要这样做”。@amwinter:它说的是“除非有必要,否则不要使用
-O
”. 这并不是说为了流控制的目的,断言的使用应该被从属:-)我甚至不会在代码中捕获断言异常,因为如果您知道在这种情况下该怎么做,您应该已经计划好并恢复了(使用不同的异常或预检查代码)。但是,与其他类型的异常相比,断言更具可读性,更易于键入。python-O基本上什么也不做。我宁愿和python-O说再见,也不愿和断言说再见。@Will--如果有一个功能可以帮助捕获bug,那么禁用它是不安全的。@paxdiablo甚至是未捕获的,断言都是流控制:它们打印堆栈并杀死进程(而不是继续进入危险的水域)。