때로는 코드 전체 블록을 하나의 문자열로 다루고, 이를 더 큰 Python 프로그램의 일부로 실행해야 하는 경우가 있습니다. 이 글에서는 코드를 문자열 형태로 변수에 담은 뒤, 해당 변수를 감싸는(wrapper) 프로그램에서 실제 Python 코드처럼 실행하는 방법을 알아보겠습니다.
exec() 함수란?
Python 내장 함수인 exec()는 문자열로 전달된 코드를 동적으로 실행하는 역할을 합니다. 실행하려는 코드는 반드시 삼중 따옴표(""")로 묶어야 하며, 여러 줄로 구성된 코드 블록도 하나의 문자열로 처리할 수 있다는 점이 특징입니다.
기본 사용 예제
아래 예제는 숫자 리스트에 짝수가 포함되어 있는지 검사하는 코드를 문자열로 저장한 후, exec()를 통해 실행하는 과정을 보여줍니다.
code = """
numbers = [11,33,55,39,55,75,37,21,23,41,13]
for num in numbers:
if num%2 == 0:
print ('the list contains an even number')
break
else:
print ('the list does not contain even number')
"""
exec(code)실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
the list does not contain even number.
정리
이 예제에서 사용된 리스트에는 짝수가 없으므로, for-else 구문의 else 블록이 실행되어 해당 메시지가 출력됩니다. 이처럼 exec()를 활용하면 문자열 형태의 코드를 프로그램 실행 중에 동적으로 수행할 수 있어, 설정 파일 기반 스크립트 실행이나 동적 코드 생성 등 다양한 상황에서 유용하게 사용할 수 있습니다.
다만 exec()는 임의의 코드를 실행할 수 있기 때문에, 외부 입력값을 그대로 전달하면 보안 취약점이 될 수 있습니다. 신뢰할 수 있는 코드에만 사용하는 것이 좋습니다.