Just recently I have been getting very a bizarre issue, which I have found no resolve to. For example, if I run the following code in the interpreter
>>> def test():
... 'docstring'
... ...
...
>>> print(test.__doc__)
I get 'docstring,' no surprise there. Now if I run this in a *.py file, I get None.
I have tried multiple files with the same results; but why does the interpreter return the docstring and not any files? Any help would most certainly be appreciated.
Note: I have tried triple quotes, double and single, and any other variation I can muster, with no luck.
Solved: Not sure how exactly, but the command I was using was 'broken' in that shell instance. Working fine now
The docstrings are stripped if you run the interpreter with the -OO switch:
-OODiscard docstrings in addition to the-Ooptimizations.
This can be also controlled by the PYTHONOPTIMIZE environment variable:
PYTHONOPTIMIZEIf this is set to a non-empty string it is equivalent to specifying the
-Ooption. If set to an integer, it is equivalent to specifying-Omultiple times.
Thus you could get this effect if you had a Python wrapper that specified -OO, or PYTHONOPTIMIZE was set to say 2.
However, this setting should also apply to the interactive interpreter:
% 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__
>>>
You can test the optimization settings at runtime via 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
If this number is greater than or equal to 2, then that is why your docstrings are gone.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With