Как вы получаете имя вызывающего модуля в виде строки, используя inspect в Python (я продолжаю получать объект module)

#python #module #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
  

Кроме того, очень ценятся любые советы о том, как повторно определить и предотвратить эту проблему в будущем. Спасибо.

Ответ №1:

inspect.getmodule() возвращает сам объект module, а не его имя.

Попробуйте заменить

 str(inspect.getmodule(frm[0]))
  

с помощью

 inspect.getmodule(frm[0]).__name__
  

Также имейте в виду, что inspect.getmodule() может возвращаться None .

Ответ №2:

Вы можете использовать __name__ атрибут:

 >>> import xml
>>> xml.__name__
'xml'
>>> m = __import__('xml')
<module 'xml' from '/usr/lib/python2.7/xml/__init__.pyc'>
>>> m.__name__
'xml'