파이썬 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가 발생하게 됩니다.해당 부분 유의해서 수정해 보시면 될 것 같습니다.
댓글 입력