我已经阅读了一些有关python和其他语言的assert语句的信息。特别是,我已经阅读了Python,Java和C的断言。我的理解可能不是100%正确,但是接下来的问题是关于Python的。
[对于Python,为什么默认情况下启用断言?为什么python与其他语言有不同的用法?**是否有特定的原因-编译时间与解释时间有关?
assert.h
中的断言的程序默认情况下不会将其禁用,但是大多数Makefile确实为发行版/发行版定义了NDEBUG
。dist
设置NDEBUGassert
宏,而不是使用assert.h
并更改了默认行为。[我知道我的问题要求的是历史背景,但这实际上是我正在寻找的答案。
旁注:我也是python的新手,在我工作的地方,我们没有在启用优化标志的生产环境中运行any代码。部署python应用程序时,这是惯例吗?
[如果您有兴趣,那么以下是我阅读的资源:
我的猜测是,由于性能原因,在Java,C和C ++中禁用了断言。断言使代码变慢,并且可能使某些代码优化变得不可能。这些语言将速度作为头等大事,因此默认情况下禁用它们是有意义的。
另一方面,Python与速度无关。看看Python Zen:
Errors should never pass silently.
Unless explicitly silenced.
断言引发AssertionError
,所以最好不要静默通过它们。
对于Python,为什么默认情况下启用断言?为什么python与其他语言有不同的用法?**是否有特定的原因-编译时间还是解释时间?
因为通常来说没有理由不这样做。 Python不是一种快速的语言,拥有看起来像它的代码在默认情况下应该可以执行操作,但并非奇怪。顺便说一句,这正在蔓延到更多的语言,例如Rust具有一个[[始终运行 assert!
宏和一个仅在调试模式下运行的单独的debug_assert!
。
pytest
之类的非xunit测试程序包也利用了此属性,这些程序包使用和重写断言以使其变得更好(更方便且约束更少)assert*
方法。旁注:我也是python的新手,在我工作的地方,我们没有在启用优化标志的情况下在生产中运行任何代码。部署python应用程序时,这是惯例吗?
如果您问是否运行pyhton
无
-O
很常见,那么可以。 -O
几乎没有什么用处:我认为我从未见过使用__DEBUG__
的代码库,而绕过assert
总是很讨厌。 -OO
基本上只做负面的事情。我所见的唯一例行使用-O
/ -OO
的情况是: