Ich codiere Python in Emacs. Irgendwie schafft es der Python-Interpreter, der in Emacs läuft, mich zu überraschen.Python in Emacs: __name__ == '__main__', aber irgendwie nicht
Wenn ich
print()
print(__name__)
print(__name__=='__main__')
if __name__ == '__main__':
print("indeed")
in einem Emacs-Puffer zu schreiben, und Emacs sagen einen Dolmetscher zu starten und den Inhalt dieses Puffers laufen lasse, erhalte ich einen Puffer
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
>>>
(Both __main__
enthält, und True
sind die Ausgaben von der print-Anweisung, der Python-Puffer zeigt immer die >>>
an und druckt unmittelbar danach.Ich bin mir dessen bewusst, das ist kein Problem.)
Von der Befehlszeile aus zeigen sowohl python
als auch python -i
die 'in der Tat', wie erwartet.
Wie ist Emacs in der Lage zu der Inkonsistenz der Auswertung zu True
, während nicht Dinge innerhalb if __name__ == '__main__':
ausführen? Und wie neu konfigurieren, so dass es nicht mehr tut?
@MartijnPieters: es ist das Drucken der Zeichenkette '„__main __“' als '__main__' ... – geoffspear
@Wooble: Ach, der Emacs-Puffer führte den Code direkt in einer interaktiven Eingabeaufforderung aus. Erwischt. –
Dies scheint ein Fehler in älteren Versionen von elpy zu sein: https://github.com/jorgenschaefer/elpy/issues/69 (oder, wenn du nicht elpy verwendest, ist es ein "hilfreiches Feature" von python.el.) – geoffspear