[파이썬] eval함수

allnight5·2022년 11월 24일
0

자바 개념정리

목록 보기
11/28

참조
https://blockdmask.tistory.com/437#:~:text=eval%20%28expression%29%20eval%20%ED%95%A8%EC%88%98%EB%8A%94%20%ED%95%9C%EC%A4%84%EB%A1%9C%20%EC%A0%95%EB%A6%AC%ED%95%98%EC%9E%90%EB%A9%B4.%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EB%A1%9C%20%EB%B0%9B%EC%9D%80,%EB%93%A4%EC%96%B4%EC%98%A8%20%EA%B7%B8%20expression%EC%9D%84%20%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9D%B4%20%EC%8B%A4%ED%96%89%ED%95%B4%EC%A3%BC%EB%8A%94%20%EA%B7%B8%EB%9F%B0%20%ED%95%A8%EC%88%98%20%EC%9E%85%EB%8B%88%EB%8B%A4.

eval(expression)

eval 함수는 한줄로 정리하자면
매개변수로 받은 expression (=식)을 문자열로 받아서, 실행하는 함수 입니다.

어떤가요? eval 함수 참 신기하지 않나요?
그러면 우린 input 함수를 이용해서 사용자로부터 원하는 파이썬 함수를 입력 받거나 식을 입력받아서 마음대로 프로그램을 조종할 수 있게 할 수 있습니다. 너무 좋네요.
남이 만든 프로그램에 자유롭게 명령어를 입력할 수 있다니!

그런데 그게 이 eval(expression)함수의 함정 입니다.
사용자가 마음대로 프로그램을 조종할 수 있다. 즉, 프로그램에 명령을 입력할 수 있다.
결국 그 말은 프로그램을 상처입히거나 해킹을 하거나 할 수 있다는 뜻과 동일하게 됩니다.

이 함수를 실제 릴리즈 하는 프로그램에서 사용한다고 하면 조금 위험하겠죠? 너무 많은 자유를 주는 그런 함수 입니다.

파이썬 eval(expression) 예제

1. 문자열 덧셈

a = eval('"BlockDMask" + "blog"')
print(f"1. eval('\"BlockDMask\"' + '\" blog\"') : {a}")
 

2. 숫자 덧셈

b = eval("100 + 32")
print(f'2. eval("100 + 32") : {b}')

3. 내장 함수 abs

c = eval("abs(-56)")
print(f'3. eval("abs(-56)") : {c}')
 

4. 리스트 길이

d = eval("len([1,2,3,4])")
print(f'4. eval("len([1,2,3,4])") : {d}')

5. round 함수

e = eval("round(1.5)")
print(f'5. eval("round(1.5)") : {e}')

profile
공부기록하기

0개의 댓글