반응형
파이썬내 소스코드 위치를 파악하기 위해 해당 위치의 라인 번호 또는 함수 이름을 출력이 필요할 때 있다.
초보자인 필자의 경우 debug용으로 좀더 쉽게 찾고자 출력시 파일 이름 또는 함수 이름 , 라인 위치가 필요 할 때가 있다.
사용법은 아주 간단하다.
필요한 부분만 별도로 함수를 만들어 사용해도 무방하다.
테스트 환경 :
- os : Centos 7
- python version : 3.7.10
def line_info(return_type=None):
import inspect
### line number
'''
여기를 호출한 곳의 라인위치(라인번호)를 리턴한다.
'''
cf = inspect.currentframe()
linenumber = cf.f_back.f_lineno
### Call to Function name
'''
여기를 호출한 곳의 함수이름(function name(def))를 리턴한다.
'''
func_name = cf.f_back.f_code.co_name
### file name
'''
여기를 호출한 파일 이름을 리턴한다.
'''
frame = inspect.stack()[1]
module = inspect.getmodule(frame[0])
filename = module.__file__
get_filename = filename.split('/')[-1]
if return_type == 'filename':
result_info = f'{get_filename}'
elif return_type == 'function' or return_type == 'func_name' or return_type == 'f_name':
result_info = f'{func_name}'
elif return_type == 'lineinfo' or return_type == 'linenum' or return_type == 'lineno':
result_info = f'{linenumber}'
elif return_type == 'info_all' or return_type is None:
result_info = f'{get_filename}({func_name}.{linenumber})'
else:
result_info = f'{get_filename}({func_name}.{linenumber})'
return result_info
테스트 코드는 아래와 같다.
from termcolor import cprint
def line_info(return_type=None):
import inspect
### line number
'''
여기를 호출한 곳의 라인위치(라인번호)를 리턴한다.
'''
cf = inspect.currentframe()
linenumber = cf.f_back.f_lineno
### Call to Function name
'''
여기를 호출한 곳의 함수이름(function name(def))를 리턴한다.
'''
func_name = cf.f_back.f_code.co_name
### file name
'''
여기를 호출한 파일 이름을 리턴한다.
'''
frame = inspect.stack()[1]
module = inspect.getmodule(frame[0])
filename = module.__file__
get_filename = filename.split('/')[-1]
if return_type == 'filename':
result_info = f'{get_filename}'
elif return_type == 'function' or return_type == 'func_name' or return_type == 'f_name':
result_info = f'{func_name}'
elif return_type == 'lineinfo' or return_type == 'linenum' or return_type == 'lineno':
result_info = f'{linenumber}'
elif return_type == 'info_all' or return_type is None:
result_info = f'{get_filename}({func_name}.{linenumber})'
else:
result_info = f'{get_filename}({func_name}.{linenumber})'
return result_info
################################################################################
### test code
def get_line_info_all():
cprint(f'get_line_info_all : {line_info(return_type="info_all")}','green')
def get_line_number():
cprint(f'get_line_number : {line_info(return_type="lineno")}','yellow')
def get_filename():
cprint(f'get_filename : {line_info(return_type="filename")}','blue')
def get_function_name():
cprint(f'get_function_name : {line_info(return_type="f_name")}','red')
def get_arg_null():
cprint(f'get_arg_null : {line_info()}')
### 화면 출력을 위한 함수 호출
get_line_info_all()
get_line_number()
get_filename()
get_function_name()
get_arg_null()
반응형
'Development > Python3..x' 카테고리의 다른 글
[python3.x] pyenv로 설정한 python버전으로 정상동작되지 않을때 (0) | 2021.12.08 |
---|---|
[python3] "TypeError: Object of type date is not JSON serializable" Error 발생시 (1) | 2021.12.06 |
[python3.x] ipython IDE 설치 (0) | 2021.06.05 |
[python3.x] pyenv 설정 오류 관련 (WARNING: `pyenv init -` no longer sets PATH.) (3) | 2021.06.05 |
[python3.x-study] 문자열 처리 함수 (2) - replace, find, index, count (0) | 2021.03.24 |