본문 바로가기
Python

[Python] 파이썬 eval() 함수 사용법 및 예제

by A6K 2022. 11. 7.

파이썬은 eval()이라는 함수를 지원한다. 파이썬의 eval() 함수는 문자열로 표현되는 표현식(expression)을 실행해서 결과값을 받아오는 함수다.

예를 들어보자.

exp = "1 + 2"
result = eval(exp)

print(result)

# 3

eval() 함수는 문자열로 표현되어 있는 "1 + 2"라는 표현식의 값을 평가해서 리턴해준다. 1 + 2의 결과값은 3이므로 3이 화면에 출력된다. 문자열 표현식을 실행해준다는 점이 이 함수의 강력한 점인데, 사용자의 입력을 받아서 eval() 함수로 실행할 수도 있다.

while True:
  exp = input('표현식 : ')
  if exp == 'exit':
    break
  
  result = eval(exp)
  print(result)

# 표현식 : 1 + 2
# 3
# 표현식 : 4 * 5
# 20
# 표현식 : 21 / 5
# 4.2
# 표현식 : 21 % 5
# 1
# 표현식 : exit

간단한 산술연산 이외에도 정의되어 있는 함수를 호출할 수도 있다. 예를 들어 절대값을 계산해주는 abs() 함수를 호출할 수도 있다.

exp = "abs(-10)"
result = eval(exp)

print(result)

# 10

문자열로 표현된 expression을 그대로 실행해준다니 매우 편리한 함수다. 하지만 편리함에는 위험함도 존재한다. 사용자가 입력한 문자열을 그대로 실행시켜주기 때문에 파이썬 인터프리터의 동작을 사용자의 입력이 결정할 수 있다. 이 때문에 파이썬이 예상치 못 한 동작을 할 수도 있다.

예를 들어보자.

exp = "__import__('os').system('ls -altr')"
result = eval(exp)

print(result)

이 스크립트를 실행하면 파이썬 스크립트가 실행되는 환경에서 'ls -altr'을 실행한 결과가 리턴된다. 단순히 디렉토리 엔트리를 출력하는 ls 명령어 대신 웹에서 악성코드를 다운로드해서 실행시키는 것도 가능하다.

편리하지만 위험한 함수인 eval() 함수는 서버에 배포되어 여러사용자들이 함께 사용하는 프로그램에는 최대한 사용하지 않는 것이 좋을 것 같다.


 

파이썬 스크립트 작성에 도움되는 글 모음

파이썬으로 프로그램을 작성할 때 도움되는 글들을 모아본다. 개발환경 [Python] macOS에 파이참 설치 [Python] 파이참 깃허브 연동 [Python] 파이썬 PIP란? [Python] VSCode를 이용한 개발환경 [Python] python3를

hbase.tistory.com

 

댓글