Я кодирую python в emacs. Однако, как-то интерпретатор python, работающий в emacs, меня удивляет.Python в emacs: __name__ == '__main__', но почему-то не
Если я пишу
print()
print(__name__)
print(__name__=='__main__')
if __name__ == '__main__':
print("indeed")
в буфере Emacs, и сказать Emacs, чтобы запустить интерпретатор и запустить содержимое этого буфера, я получаю буфер, содержащий
Python 3.3.5 (default, Mar 18 2014, 02:00:02)
[GCC 4.2.1 20070831 patched [FreeBSD]] on freebsd9
Type "help", "copyright", "credits" or "license" for more information.
>>>
__main__
True
>>>
(оба __main__
и True
- это выходы из инструкции print, буфер python всегда отображает >>>
и печатает сразу после него. Я знаю об этом, это не проблема.)
Из командной строки оба python
и python -i
показывают «действительно», как и ожидалось.
Как Emacs способен к несогласованности в оценке __name__=='__main__'
до True
, но не выполняет вещи внутри if __name__ == '__main__':
? И как перенастроить его, чтобы он больше не делал этого?
@MartijnPieters: это печать строки '«__main __»' 'как __main__' ... – geoffspear
@Wooble: ах, буфер Emacs выполнил код прямо в интерактивном приглашении. Попался. –
Это, похоже, ошибка в более старых версиях elpy: https://github.com/jorgenschaefer/elpy/issues/69 (или, если вы не используете elpy, это «полезная функция» python.el.) – geoffspear