-
[Python] 문자열을 입력하면 코드로 실행해주는 exec, eval 함수 사용해보기Python/파이썬 기초 2023. 4. 20. 09:26반응형
문자열을 입력하면 코드로 실행해주는 exec, eval 함수 사용해보기
제가 지금 만들고 있는 프로그램에서 파이썬 코드를 입력하면 그 결과를 보여주는 기능이 필요했습니다. 그런데, 저는 지금까지 저 혼자 사용하는 프로그램 이외에는 만들어본 적이 없었답니다. 파이썬을 잘 모르는 사람이 쓸건데, 소스코드를 알아서 수정하라고 하면 프로그램을 만드는 의미가 없겠지요. 예를 들어, 이런 느낌입니다.
여기 py 파일 보이시죠? 이 파일의 몇번째 줄에 원하는 코드를 적으시고... 아뇨, 그렇게 하면 에러가 나니까 띄어쓰기 하지 마시고요!...
이런 말을 할 생각을 하니 벌써부터 어질어질합니다. 이런 상황을 막기 위해서는, 누군가가 코드를 입력하면 실행 결과를 알려주도록 하는 코드가 필요합니다. 이 때는 flake8이라는 정적 분석 패키지를 이용해도 좋지만, 이번에는 다른 접근을 해 볼게요. 바로,
exec
과eval
이라는 함수입니다.exec
은 명령어를 실행한다 할때의 execute라는 뜻을 가진 함수입니다. 문자열로 주어진 수식을 실행하는 기능을 가지고 있지요. 예를 들어,print(1+2+3)
이라는 코드를 입력하고, 그걸 실행하려 한다면 이 함수를 통해서 실행할 수 있습니다.# 우선 코드를 입력해 줍니다. print(1+2+3)로 입력하면 되겠죠! code = input('원하는 코드를 입력하세요') # 다음에는 실행입니다 print('입력한 코드가 실행됩니다...') exec(code)
원하는 코드를 입력하세요 print(1+2+3) 입력한 코드가 실행됩니다... 6
이정도면 괜찮은것 같습니다. 그런데, 이 프로그램에는 문제가 하나 있어요. 만약,
print(1+2+3)
이 아니라, 그냥1+2+3
을 입력한다면 코드 실행 결과를 알 수 없다는 점이지요. (print
함수와는 달리, 출력이 아니라 리턴을 하기 때문입니다)이 때는, 실행 결과를 별도로 출력해야 하는데,
exec
함수는 아쉽게도 결과를 리턴하지 않습니다. 그렇다면, 결과를 리턴해주는eval
함수를 알아보도록 하지요.# 1+2+3 이라고 입력한다면... code = input('원하는 코드를 입력하세요') # exec 함수의 경우 print('exec 함수로 코드가 실행됩니다...') print(exec(code)) print('------------------------------') # eval 함수의 경우 print('eval 함수로 코드가 실행됩니다...') print(eval(code))
원하는 코드를 입력하세요 1+2+3 exec 함수로 코드가 실행됩니다... None ------------------------------ eval 함수로 코드가 실행됩니다... 6
이렇게 차이를 보여주듯이,
eval
함수(evaluate라는 뜻입니다)는exec
함수와는 달리 주어진 코드를 실행하고, 그 코드의 리턴값을 그대로 리턴해주는 기능을 가지고 있습니다.문자열로 코드가 주어졌다면, 이걸 실행할 수 있는
exec
과eval
함수를 각각 알아보았습니다. 편리한 함수이지만, 변경이 가능한 문자열을 바탕으로 코드를 실행하기 때문에, 의도치 못한 실행 결과가 생길 수 있다는 점(보안상의 문제가 있습니다) 주의하면서 사용해 보시기 바랍니다.반응형'Python > 파이썬 기초' 카테고리의 다른 글
[Python] 파이썬 연산자를 사용해서 계산기처럼 써보기 (0) 2023.04.24 [Python] 파이썬 변수 알아보기 (0) 2022.08.05 [Python] 윈도우에서 파이썬 설치 및 개발환경 설정하기 (0) 2022.08.02