새소식

반응형
Programming Language/Python

[Python] 파이썬 eval() 함수

  • -
반응형

파이썬 로고 이미지입니다.
Python

파이썬 eval() 함수


파이썬 eval 함수는 파이썬의 내장 함수 중 하나로, 문자열로 표현된 파이썬 표현식을 실행하고 그 결과를 반환하는 역할을 한다. eval() 함수의 사용 목적은 주로 사용자 입력을 받아 파이썬 코드를 동적으로 실행하거나, 문자열로 표현된 수식을 계산하는 경우에 활용된다. 
 
 

파이썬 eval 함수 예제


이제는 eval 함수의 예제 코드들을 살펴보면서 실제로 어떻게 쓰이는지 살펴보자.
 

간단한 수식 계산

expression = "2 + 3 * 5"
result = eval(expression)
print(result)  # 출력: 17

문자열 "2 + 3 * 5"를 eval 함수로 실행하면 문자열 자체를 파이썬 표현식으로 변경 후 식을 계산한다. 따라서, 위의 예제와 같이 result 변수에는 17이 저장된 걸 확인할 수 있다.
 
 

리스트 조작

my_list = [1, 2, 3]
operation = "my_list.append(4)"
eval(operation)
print(my_list)  # 출력: [1, 2, 3, 4]

문자열로 표현된 리스트 조작 코드를 실행하여 리스트에 원소를 추가한다. eval 함수를 사용하면 문자열을 실제 파이썬 표현식으로 변경해 준다는 점을 기억하자.
 
 

간단한 문자열 연산

expression = "3 * 'Hello ' + 'World'"
result = eval(expression)
print(result)  # 출력: "Hello Hello Hello World"

eval 함수를 사용하여 문자열 수식을 실행하고 결과를 반환하는 예제이다. 문자열 "Hello "를 3번 반복한 후 "World"와 연결하여 "Hello Hello Hello World"를 반환한다.
 
 

조건문과 변수 사용

x = 10
y = 5
condition = "x > y"
if eval(condition, globals()):
    print("x는 y보다 큽니다.")
else:
    print("x는 y보다 작거나 같습니다.")

eval 함수를 사용하여 변수 x와 y의 값을 비교하는 조건물을 실행하는 예제이다. eval 함수를 사용하여 조건식을 실행하고, 결과가 True이면 "x는 y보다 큽니다"를 출력하고, 그렇지 않으면 "x는 y보다 작거나 같습니다"를 출력한다. eval 함수의 두 번째 파라미터로 들어가는 globals()는 x와 y에 대해 전역변수로 접근할 수 있게 해 준다.
 
 

간단한 함수 정의와 호출

function_definition = "def add(a, b): return a + b"
eval(function_definition)
result = eval("add(2, 3)")
print(result)  # 출력: 5

eval 함수를 사용하여 함수를 동적으로 정의하고 호출하는 예제이다. function_definition 변수에 문자열로 함수를 정의를 할당한다. 함수가 정의되면 해당 함수를 사용하여 2 + 3의 결과를 result 변수에 저장한다.
 
 

eval 함수 사용자 입력 예외 처리

eval 함수를 사용할 때 사용자 입력에 대한 예외 처리는 매우 중요하다. 사용자 입력이 잘못된 경우, 프로그램은 오류를 발생시키지  않도록 예외처리를 해야 한다. 이를 위해 try와 except 구문을 사용할 수 있다. 

user_input = input("수식을 입력하세요: ")
try:
    result = eval(user_input)
    print("결과:", result)
except (SyntaxError, NameError) as e:
    print("올바른 수식이 아닙니다. 에러 메시지:", e)
except Exception as e:
    print("오류가 발생했습니다. 에러 메시지:", e)

 
eval() 함수를 실행하면서 SyntaxError 또는 NameError가 발생하면 해당 예외를 처리하고, 그 외의 예외에 대해서도 일반적인 예외 처리를 제공한다. 이렇게 하면 사용자 입력에 대한 오류를 처리하고 프로그램의 안정성을 높일 수 있다.
 
만약 try except 구문에 대해 더 자세히 알고 싶다면 아래 게시글을 참고하자.

 

[Python] 파이썬 try except 예외 처리

파이썬뿐만 아니라 프로그래밍을 하면서 에러가 발생할 경우 프로그램이 중지되는 상황을 다들 한 번씩 겪어봤을 것이다. 하지만 에러가 발생하더라도 프로그램이 중지되질 원하지 않을 경우

snidercp.tistory.com

 
만약 사용자 예외처리를 하지 않고 사용자 입력을 그대로 실행하면 보안 취약점을 만들 수 있다. 아래는 악의적인 코드의 예시이다.

user_input = "__import__('os').system('rm -rf /')"
eval(user_input)

사용자 입력을 받아 os.system() 함수를 통해 시스템 명령을 실행하려고 시도하며, 시스템을 손상시킬 수 있는 보안 취약점을 가지고 있다.
 
 
 
읽어주셔서 감사합니다.
 

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.