如何使用inspect在Python中获取调用模块的名称字符串(我总是得到一个模块对象)
我正在尝试通过使用inspect模块来获取调用模块的名称。当我返回应该是模块字符串的内容时,得到的是这个:
<module 'mymod.wrapper' from '/usr/local/lib/python2
我查看了文档,但没有找到关于这可能是什么原因的任何信息(我有点累,可能错过了)。
这是我的类
import inspect
class Wrapper():
def getView(self, view, database=False):
module = self._getDatabase()
print(module)
def _getDatabase(self):
# Get calling module
frm = inspect.stack()[1]
modWhole = str(inspect.getmodule(frm[0]))
modSplit = modWhole.split('.')
mod = modSplit[0] + '.' + modSplit[1]
return mod
另外,任何关于如何识别和防止这个问题的建议都非常感谢。谢谢。
2 个回答
1
你可以使用 __name__
这个属性:
>>> import xml
>>> xml.__name__
'xml'
>>> m = __import__('xml')
<module 'xml' from '/usr/lib/python2.7/xml/__init__.pyc'>
>>> m.__name__
'xml'
4
inspect.getmodule()
返回的是模块对象本身,而不是它的名字。
试着把
str(inspect.getmodule(frm[0]))
换成
inspect.getmodule(frm[0]).__name__
另外,要记住,inspect.getmodule()
可能会返回 None
,也就是没有值。