반응형
파이썬 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() 보다 제한적인 면이 있네요.
필요에 따라 적절한 함수를 사용하시면 되겠습니다.
반응형
'Programming Language > Python' 카테고리의 다른 글
[Python] 파이썬 기초, 등차수열 구하기 (0) | 2024.03.01 |
---|---|
[Python] 파이썬 비트연산자 기초 개념 (0) | 2024.02.28 |
[Python] 가장 큰 값을 반환하는 파이썬 max() (0) | 2024.02.26 |
[Python] 파이썬 문자열 포매팅, 'f-string' 사용법 (1) | 2024.02.24 |
[Python] 파이썬 문자열 결합 시 join() / 구분자.join(반복 가능 객체) (0) | 2024.02.24 |