Python исключение множество причин / стека трассировки - PullRequest
1 голос
/ 03 ноября 2019

Я пишу платформу для симуляции агентов в 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 Однако оно довольно хакерское, и я не уверен, как лучше включить его в исключение. Я чувствую, что должен быть более легкий путь, любые предложения будут с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...