이 파이썬의 지구를 깜짝 놀라게 결핍 될 수 있지만하지 않을 수 있습니다 난 여전히 다음과 같은 동작 뒤에있는 근거에 대한 궁금해 : 때 실행이상한 구문 오류, 버전 2.6 및 3.1
source = """
print('helo')
if __name__ == '__main__':
print('yeah!')
#"""
print(compile(source, '<whatever>', 'exec'))
전 get ::
나는이 예외를 피하기 위해 (1) 후행 #
; (2) if __name__ == '__main__':\n print('yeah!')
행을 삭제하거나 outcommenting; (3) 소스의 맨 끝에 개행을 추가하십시오.
오류없이 소스 코드 끝에 print('yeah!')
뒤에 오른쪽 끝 줄 바꿈이 없으면 소스가 컴파일됩니다.
또한이 동작을 파이썬 2.6에서 재현 할 수 있으므로 새로운 3k 시리즈 이 아닙니다.
위의 내용을 파일 내에두고 직접 실행하거나 을 가져 오면 아무런 오류가 발생하지 않으므로이 오류는 매우 짜증나게됩니다. 예상되는 동작입니다.
#
(해시) 문자열 리터럴 외부는 항상 파이썬 소스에서 (비어 있음) 주석의 시작을 나타내야합니다. 또한 if __name__ == '__main__'
절이 있는지 여부는 이 구문 수준에서 soure의 해석을 변경하지 않아야합니다.
누구나 위의 문제를 재현하고/또는 현상에 대한 의견을 보낼 수 있습니까?
환호
재현 할 수있었습니다. 기괴한 - 나는 대답에도 관심이있다. –
2.6.1에서 재현되었습니다. 그것은 나에게도 버그 인 것처럼 보이지만 꽤 극단적 인 경우입니다. –
"업데이트"를 답으로 받아 들일 수 있습니다. – kennytm