#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'