Python __doc__返回无

Cub*_*bli 2 python docstring python-3.x

就在最近,我遇到了一个非常奇怪的问题,我发现没有决心.例如,如果我在解释器中运行以下代码

>>> def test():
...     'docstring'
...     ...
... 
>>> print(test.__doc__)
Run Code Online (Sandbox Code Playgroud)

我得到了'docstring',这并不奇怪.现在如果我在*.py文件中运行它,我会得到None.

我尝试了多个具有相同结果的文件; 但为什么解释器返回文档字符串而不是任何文件?任何帮助肯定会受到赞赏.

注意:我已经尝试过三重引号,双重和单引号,以及我可以集合的任何其他变体,没有运气.

已解决:不确定具体如何,但我使用的命令在该shell实例中被"破坏"了.现在工作正常

Ant*_*ala 6

如果您使用-OO开关运行解释器,则会剥离文档字符串:

-OO 除了-O优化之外,还要放弃文档字符串.

这也可以由PYTHONOPTIMIZE环境变量控制:

PYTHONOPTIMIZE

如果将其设置为非空字符串,则等同于指定-O选项.如果设置为整数,则相当于-O多次指定.

因此,如果您有一个指定的Python包装器-OO,或者PYTHONOPTIMIZE设置为说明,那么您可以获得此效果2.


但是,此设置也适用于交互式解释器:

% PYTHONOPTIMIZE=2 python3
Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def foo():
...     'bar'
... 
>>> foo.__doc__
>>> 
Run Code Online (Sandbox Code Playgroud)

您可以通过sys.flags以下方式在运行时测试优化设置:

% PYTHONOPTIMIZE=2 python3
Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.flags.optimize
2
Run Code Online (Sandbox Code Playgroud)

如果此数字大于或等于2,那么这就是您的文档字符串消失的原因.