2012-08-10 31 views
7

Đây là giải pháp tốt nhất của tôi cho đến nay cho vấn đề truy cập vào các module gọi từ bên trong một hàm:Làm thế nào để có được mô-đun mà từ đó chức năng hiện đang thực hiện được gọi?

import inspect 
import sys 
def calling_module(level=0): 
    filename = inspect.stack()[level+2][1] 
    modulename = inspect.getmodulename(filename) 
    try: 
     return sys.modules[modulename] 
    except KeyError: 
     return sys.modules['__main__'] 

... nhưng tiềm ẩn trong việc xử lý các KeyError là (phần lớn là vô căn cứ) giả định rằng nó có thể chỉ xảy ra nếu filename đang được chạy dưới dạng __main__.

Thư viện chuẩn Python có cung cấp cách thức mạnh mẽ hơn để thực hiện việc này không?

Trả lời

8

tôi thấy rằng các công việc sau tốt:

import inspect 
def printfunc() 
    stk = inspect.stack()[1] 
    mod = inspect.getmodule(stk[0]) 
    print "Currently in " + mod + "." + stk[3] 

mà tôi có bên trong một hàm tiện ích gọi là cái gì đó như printfunc()

Các vấn đề liên quan