python中源文件的条件评估

时间:2011-03-08 01:22:23

标签: python

假设我有一个仅用于预生产代码的文件

我想确保它不会在生产代码中运行 - 任何调用都必须失败。

该文件顶部的代码段不起作用 - 它破坏了Python语法,该语法指定return必须在函数中发生。

if not __debug__:
   return None

这里最好的解决方案是什么 - 不涉及制造巨大的其他方案,即。 : - )

4 个答案:

答案 0 :(得分:7)

if not __debug__:
    raise RuntimeError('This module must not be run in production code.')

答案 1 :(得分:4)

也许将非生产代码拆分成一个有条件地从主代码导入的模块?

if __debug__:
    import non_production
    non_production.main()

更新:根据您的评论,您可能希望查看第三方库pypreprocessor,它允许您在Py​​thon中执行C风格的预处理程序指令。它们提供a debugging example,它看起来非常接近您正在寻找的内容(忽略内联调试代码而不需要缩进)。

从该网址复制/粘贴:

from pypreprocessor import pypreprocessor
pypreprocessor.parse()
#define debug

#ifdef debug
print('The source is in debug mode')
#else
print('The source is not in debug mode')
#endif

答案 2 :(得分:1)

import sys

if not __debug__:
    sys.exit()

sys.exit的文档。

答案 3 :(得分:1)

您可以这样做的一种方法是将该模块中的所有内容隐藏在另一个有条件导入的模块中。

.
├── main.py
├── _test.py
├── test.py

main.py:

import test
print dir(test)

test.py:

if __debug__:
    from _test import *

_test.py:

a = 1
b = 2

修改

刚刚在另一个答案中意识到你的评论,你说“我希望避免为#ifdef创建两个不同的文件”。如another answer所示,如果没有if语句,确实没有办法做你想做的事。

我已经通过samplebias推荐了答案,因为我认为答案(加上编辑)描述的是在不使用if语句的情况下最接近你的答案。