파이썬 exec 관련 질문

조회수 541회

파이썬에서, for문 안에 exec랑 eval을 이용해 연산하는 것을 만들었는데,

lists = ["a=1", "b=2", "c=a+b"]
returned_list = []
for x in lists:
    exec(x)
    returned_list.append(eval(x))
print(returned_list)

이런식으로 쓰면 SyntaxError: invalid syntax가 나오더라구요.. Shell에서는 비슷한 코드를 쓰면 되는데 함수 내에서 eval을 쓰면 안되는건가요?

어떻게 해야 해결될까요.. 리스트 내의 변수를 지정하는 문법을 가진 문자열을 실행시키고, 그 문자열을 사용하는 함수를 만들고싶은데..

1 답변

  • 정확히 어떤 것을 구현하려고 하시는지는 잘 모르겠지만, 사용하신 exec()eval()은 다음과 같은 차이가 있습니다.

    • exec() : 입력값으로 받은 문자열을 그대로 실행합니다. 인터프리터에 해당 문자열을 직접 입력하는 것과 같은 결과를 얻는다고 보시면 됩니다.
    • eval() 입력값으로 expression을 받아 실행합니다. expression이기 때문에 exec()에서는 오류가 발생하지 않았던 선언문 등을 eval()에 입력값으로 주면 오류가 발생합니다.

    즉, exec()의 경우 exec('a=1')exec('1+2') 등이 모두 가능하지만, eval()의 경우 eval('a=1') 을 실행하면 syntax error가 발생하게 됩니다.

    해당 부분 유의해서 수정해 보시면 될 것 같습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)