본문 바로가기
Programming Language/Python

[Python] 파이썬 문자열 리터럴 실행 함수, ast.literal_eval()

by 뒹굴거리는프로도 2024. 2. 27.
반응형

 


파이썬 eval() 함수를 아시나요? 문자열 표현식을 인자로 받아 해당 표현식을 실행하고, 실행 결과를 반환할 때 사용하는 함수입니다.

그런데 eval() 함수는 실행할 리터럴을 문자열로 받기 때문에, 주입 공격에 취약하다는 단점이 있습니다.

 

이 eval()을 대신하여 파이썬은 ast.literal_eval() 함수를 제공합니다. 

사용자는 파이썬 내장 모듈인 ast를 import 한 후, literal_eval() 함수를 불러 사용하면 됩니다.

 

import ast

result = ast.literal_eval(d)

# d로 파이썬 표현식이 들어갑니다.

 

이 함수는 문자열을 실행할 때, Python에서 제공하는 데이터 타입인지 아닌지 평가하고 실행하기 때문에 eval() 보다 안전하다는 장점이 있습니다.

예를 들면 "('a', 'b')"을 받으면 'Python 리터럴'인지 평가한 후 ('a', 'b') 튜플을 반환해 주는 것이지요.

import ast

test = ast.literal_eval("('a', 'b')")

print(test)

# ('a', 'b') 가 출력됩니다.

 

인자로는 문자열 리터럴, 리스트, 튜플, 세트, 딕셔너리의 리터럴 , 정수, 부동소수점 숫자, 복소수, 불리언, None 값을 넣을 수 있다고 합니다.

이런 점에서는 eval() 보다 제한적인 면이 있네요.

필요에 따라 적절한 함수를 사용하시면 되겠습니다.

 

 


 

반응형