2013-08-30 2 views
3

나는 임시적으로 null을 전달하려고 시도하고있었습니다. eval은 아무 것도하지 않았습니다. (주문을 보존하는 것이 내 해킹 프로필 스크립트에 중요했기 때문에 제거하지 못했습니다.) 그리고 제가 준 후 다소 미안했습니다. 'pass' 빈 문자열이나 이와 동등한 do-nothing 문과 함께 나에게 버려졌다.왜 eval ('pass')이 SyntaxError입니까?

>>> eval('pass') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<string>", line 1 
    pass 
    ^
SyntaxError: unexpected EOF while parsing 

나는 결국 그냥 None 공급하지만, 왜 구문 오류인가? "예기치 않은 EOF"가 나를 곤혹스럽게합니다. 그 문자열은 그 자체로 완전한 진술입니다. eval은 키워드를 허용하지 않습니까?

+0

'eval' 키워드 용인'평가를 (' lambda x : x ')'는 완벽하게 유효합니다. –

+1

'exec ('pass')'가 유효하다는 것에주의하십시오. 'exec'와'eval'의 차이점을 기억하는 방법은 무언가를 반환하는 것 ('None'을 포함하여)에'eval'을 사용하는 것입니다. 아무것도 반환하지 않는 경우에는'exec'을 사용합니다. 좋은 예제는 http://stackoverflow.com/questions/2220699/whats-the-difference-between-eval-exec-and-compile-in-python을 참조하십시오. – korylprince

+0

'pass'는 표현식이 아니므로 명령문입니다. 따라서'eval()'대신'exec()'을 사용하거나'eval()'에 표현식을 부여하십시오. '없음'은 표현식입니다. – martineau

답변

9

eval's documentation에서 인용 : "표현식 인수가 구문 분석되어 파이썬 표현식으로 평가됩니다." 그런 다음 pass은 표현식이 아닌 명령문입니다.

+0

+1 사실, ['pass' *는 * 선언문입니다.] (http://docs.python.org/2/reference/simple_stmts.html#pass) –

0

nickie 말했듯이, 표현과 eval 작품,하지만 난 여기에 대해 이야기로 evalrepr과 함께 이해하는 것이 좋다는 것을 추가하고 싶었

Understanding repr() function in Python