2012-01-12 3 views
1

줄 번호와 모듈이 주어진 경우, 그 라인을 포함하고있는 모듈에서 함수의 이름을 되 찾는 일을하고 싶습니다. 파이썬에서 가능합니까?파이썬에서 라인을 포함하는 함수 얻기

+0

줄 번호? 나는 방법을 찾기 위해 라인 번호와 클래스를 통해 아무런 연결이 없다고 생각한다. – Efazati

+2

무엇이든 가능하다. 하지만 더 중요한 것은 ... 왜 이걸하고 싶니? – jathanism

+2

* 뭐든지 가능 * - 표창장이 필요합니다. – MattH

답변

2

파이썬에서는이 작업을 수행 할 수있는 기본 제공 방법이 없습니다. 그러나 당신이 그런 일을 할 수있는 기능을 정의 할 수 있지만, 현재 디렉토리에있는 파일과 같은 모듈을 처리 할 것입니다 :

import re 

def get_function_name(module, line): 
    module_file = module.replace('.', '/') + '.py' 
    lines = open(module_file, 'r').xreadlines() 
    i = line - 1 
    try: 
     while i: 
      tmp = next(lines) 
      i -= 1 
    except StopIteration: 
     raise EOFError('Not enought lines in module %s' % module) 
    function_line = next(lines) 
    function_name = re.match('def (\w+)\([^)]*\):', function_line) 
    if function_name: 
     return function_name.group(1) 
    raise ValueError('No function declared on line %s' % line) 

이 기능은 파일로 전달 된 모듈을 열 전달 라인에 도달 할 때까지 반복한다, 그런 다음 정규 표현식을 사용하여 함수의 이름을 검색합니다. 전달 된 행에 함수가 선언되지 않았거나 전달 된 행이 파일의 행 수를 초과하면 Error이 발생합니다. 예 :

>>> get_function_name('my_module.my_submodule', 24) 
'my_function_name' 
>>> get_function_name('my_module.my_submodule', 25) 
    Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 15, in get_function_name 
ValueError: No function declared on line 17 
>>> get_function_name('my_module.my_submodule', 123456) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 10, in get_function_name 
EOFError: Not enought lines in module 
관련 문제