기록하는삶

[파이썬/Python] 입력한 expression(str)의 실행, eval과 exec 함수 본문

AI/파이썬(Python)

[파이썬/Python] 입력한 expression(str)의 실행, eval과 exec 함수

mingchin 2021. 11. 25. 02:21
728x90
반응형

떄로 문자열로 적혀있는 것을 실행하고 싶은데, 데이터형(data type)이 맞지 않아 곤란한 경우가 있다. 수식이나 함수, 혹은 구문에 한해 해당 문자열이 말하는 내용을 그대로 실행시켜주는 함수가 eval과 exec이다.

1) eval(str)

예를 들어, 

"2+2*20-50+9999/3-2 계산해봐 메롱ㅋ"

이라는 문자열 코드의 앞 연산을 진행하고 싶은 경우, 숫자와 수식 기호까지 문자열로 표현되어 있기 때문에 해당 부분의 문자열의 형을 변환하는 과정이 필요하다. 하지만 eval을 사용한다면?

eval()은 인자로 받는 표현(수식, 함수 등)에 대해 해당 문자열을 코드로 실행했을 때의 결과를 반환한다.

이런 식이다. 즉, 위 예시와 같은 상황도 쉽게 해결이 가능하다.

위처럼 문자열 형태로 받은 배열, 튜플, 집합 등을 객체로 반환하는 것도 가능하다.

 

다만 코드 가독성이 떨어질 수 있고, 보안상의 문제가 있을 수 있어 사용을 지양하는 것이 좋다고 한다.

위와 같은 상황은 아주 쉽게 문자열로 입력받은 숫자와 기호를 통해 연산을 할 수 있는 코드다.

다만 사용자가 입력에 따라,

이렇게 내장 코드가 드러나거나 다른 실행이 일어날 수 있다는 것이다.

2) exec(str)

유사하지만 조금 다르게, 구문을 내용으로 받을 수 있는 exec 함수도 있다.

예를 들어,

exec 함수가 내부 str을 수식처럼 실행했기 때문에, z에 저장된 값이 바뀌었다.

한 줄이 아니라, 여러 줄에 대해서도 내부 내용을 실행할 수 있다. 신기방기

 

관련 문제: https://mingchin.tistory.com/69

728x90
반응형