[파이썬] `sys._getframe()`: 현재 프레임 또는 호출 스택에서 n 번째 외부 프레임 반환

개요

sys._getframe() 함수는 파이썬에서 현재 프레임 또는 호출 스택에서 n 번째 외부 프레임을 반환하는 기능을 제공합니다. 이 함수를 사용하면 프로그램 실행 중에 현재 실행 스택을 분석하고, 특정 위치의 호출 스택을 탐색할 수 있습니다. 이는 디버깅, 프로파일링 및 코드 분석을 위해 매우 유용합니다.


사용법

sys._getframe(n) 에서 n 은 현재 프레임으로부터 거슬러 올라갈 외부 프레임의 개수를 의미합니다. n 은 0 이상의 정수값이어야 합니다. 일반적으로 0은 현재 프레임을 의미하고, 1은 직접 호출한 함수의 프레임을 의미합니다. n 이 더 큰 양수인 경우, 더 멀리 외부 프레임으로 이동하게 됩니다.

아래는 sys._getframe() 함수를 사용한 예제 코드입니다.

import sys

def my_function():
    frame = sys._getframe(1)
    print(frame.f_code.co_name)  # 직접 호출한 함수의 이름 출력

def another_function():
    my_function()

another_function()

위의 예제 코드에서 my_function() 내에서 sys._getframe(1) 을 호출하면 현재 프레임에서 한 단계 전인 직접 호출한 another_function() 의 프레임을 반환합니다. 그 후 frame.f_code.co_name 을 사용하여 해당 프레임의 함수 이름을 출력합니다.


결과

위의 예제 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

another_function

이는 my_function()another_function() 을 직접 호출했음을 나타냅니다.


결론

sys._getframe() 함수는 파이썬의 디버깅, 프로파일링 및 코드 분석에 유용한 기능 중 하나입니다. 현재 프레임 또는 호출 스택에서 n 번째 외부 프레임을 가져와서 프로그램의 실행 흐름을 분석할 수 있습니다. 하지만 이 함수는 내부적인 사용을 목적으로하고, 일반적으로는 추천되지 않으므로 주의하여 사용해야 합니다.