如何使用inspect在Python中获取调用模块的名称字符串(我总是得到一个模块对象)

1 投票
2 回答
5128 浏览
提问于 2025-04-16 18:40

我正在尝试通过使用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,也就是没有值。

撰写回答