2016-01-22 4 views
2

Совсем недавно я получаю очень странную проблему, на которую я не нашел никакого решения. Например, если я запускаю следующий код в интерпретатореPython __doc__ return None

>>> def test(): 
...  'docstring' 
...  ... 
... 
>>> print(test.__doc__) 

я получаю «строку документации,» никаких сюрпризов. Теперь, если я запустил это в файле * .py, я получаю None.

Я пробовал несколько файлов с одинаковыми результатами; но почему интерпретатор возвращает docstring, а не какие-либо файлы? Любая помощь, несомненно, будет оценена по достоинству.

Примечание: Я пробовал тройные кавычки, двойные и одиночные, и любые другие варианты, которые я могу собрать, не повезло.

Решено: Не знаете, как именно, но команда, которую я использовал, была «сломана» в экземпляре оболочки. Работа отлично теперь

+0

@AvinashRaj У меня есть, это просто краткий обзор моей проблемы. – Cubli

+0

Если вы печатаете '__file__', вы получаете ожидаемое значение? –

+0

@ IgnacioVazquez-Abrams Да. – Cubli

ответ

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__ 
>>> 

Вы можете проверить параметры оптимизации во время выполнения с помощью 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 

Если это число больше или равно 2, то это почему ваши докстеллы исчезли.

Смежные вопросы