Получить объект модуля из стекового фрейма

Учитывая объект кадра, мне нужно получить соответствующий объект модуля. Другими словами, реализуйте callers_module, чтобы это работало:

import sys
from some_other_module import callers_module
assert sys.modules[__name__] is callers_module()

(Это было бы эквивалентно, потому что я могу сгенерировать трассировку стека в функции для этого тестового случая. Импорт предназначен просто для того, чтобы сделать этот пример завершенным и тестируемым, и предотвратить использование callers_module ярлыка для использования __name__, так как он 'в другом модуле.) Я

мы пытались это:

import inspect
def callers_module():
  return inspect.currentframe().f_back

Который получает объект фрейма, по которому f_code даст мне объект кода, но я могуt узнать, как получить соответствующий модуль или его имя (для использования с sys.modules). Если бы я мог получить функциональные объекты, у них есть атрибут __module__ (а также объекты кода), но этонет в кадре. Действительно, не все объекты кода принадлежат функциональным объектам, таким как код для моего теста (с утверждением выше). То же самое можно сказать о объектах кадра / кода, не имеющих модуля:но многие из них делают, и в моем случае они будут, так что ненужно обращаться; однако, простое None или исключение в этом случае тоже подойдут.

Такое ощущение, что яМне не хватает чего-то простого. Что нужно сделать, чтобы это работало?

Ответы на вопрос(2)

Ваш ответ на вопрос