ten nie może być niedobór ziemia wstrząsającego z pytona, ale nadal dziwnego o uzasadnienie następujące zachowanie: Kiedy runbłąd składni dziwne w Pythonie, wersja 2.6 i 3.1
source = """
print('helo')
if __name__ == '__main__':
print('yeah!')
#"""
print(compile(source, '<whatever>', 'exec'))
ja Get ::
File "<whatever>", line 6
#
^
SyntaxError: invalid syntax
mogę uniknąć tego wyjątku (1) usunięcie z tyłu #
; (2) usuwanie lub odrzucanie linii if __name__ == '__main__':\n print('yeah!')
; (3) dodaj znak nowej linii do końca źródła .
Co więcej, jeśli mam końcówkę źródłową bez ciągłej nowej linii prawa za print('yeah!')
, źródło będzie również kompilować bez błędu .
Mogę również odtworzyć to zachowanie w Pythonie 2.6, więc nie jest nowy do serii 3k.
Uważam, że ten błąd jest bardzo irytujący, tym bardziej, że kiedy i umieści się nad źródłem wewnątrz pliku i wykona go bezpośrednio, lub gdy zostanie zaimportowany, nie wystąpi błąd - co jest oczekiwanym zachowaniem.
a #
(hash) poza literałem ciągu znaków zawsze powinien reprezentować początek (prawdopodobnie pusty) komentarza w źródle pythona; co więcej, obecność lub nieobecność klauzuli if __name__ == '__main__'
powinna spowodować, że nie zmieni interpretacji pliku na poziomie syntaktycznym.
Czy ktoś może odtworzyć powyższy problem i/lub skomentować zjawisko ?
okrzyki
Udało mi się to odtworzyć. Bizarre - również jestem zainteresowany odpowiedzią. –
Powielane w wersji 2.6.1. Wydaje się, że jest to również błąd dla mnie, ale jest to dość skrajny przypadek. –
Możesz umieścić swoją "aktualizację" jako odpowiedź i zaakceptować to. – kennytm