Я пишу платформу для симуляции агентов в python 3.7. Пользователь системы реализует разум (процедура принятия решений, пересмотр убеждений и т. Д.) В классе Python. Агент пытается выполнить действие следующим образом:
import action
class MyMind:
def decide(self):
return action.move()
decide
вызывается платформой, затем действие проверяется и выполняется в среде.
def agent_cycle(self):
action = self.mind.decide()
#validate actions
if action is None:
raise ActionException("blah blah")
self.actuator.attempt(action) #attempt in environment
Проблема в том, что если действие недопустимо, генерируется исключение, трассировка стека не является информативной для пользователя - т.е. она не предоставляет никакой информации об их реализации decide
. decide
может быть очень сложным, без какой-либо информации об этом пути выполнения его может быть довольно сложно отладить. Мне интересно, есть ли простой способ включить decide
в трассировку стека. Конечно, я понимаю, почему его нет в трассировке стека, но я хочу «подделать», когда возникает исключение (или что-то в этом духе).
Я пытался добиться этого с помощью sys.settrace
, для записи кадров стека в decide
и использования inspect
для получения источника из кадров. Таким образом, я могу получить довольно хорошее резюме, похожее на traceback
Однако оно довольно хакерское, и я не уверен, как лучше включить его в исключение. Я чувствую, что должен быть более легкий путь, любые предложения будут с благодарностью.