Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python异常集原因/堆栈跟踪_Python_Exception_Runtime Error_Simulation_Agent - Fatal编程技术网

python异常集原因/堆栈跟踪

python异常集原因/堆栈跟踪,python,exception,runtime-error,simulation,agent,Python,Exception,Runtime Error,Simulation,Agent,我正在用python 3.7编写一个代理模拟平台。系统的用户在python类中实现mind(决策过程、信念修正等)。代理尝试执行以下操作: import action class MyMind: def decide(self): return action.move() decise由平台调用,然后在环境中验证和执行操作 def agent_cycle(self): action = self.mind.decide() #validate ac

我正在用python 3.7编写一个代理模拟平台。系统的用户在python类中实现mind(决策过程、信念修正等)。代理尝试执行以下操作:

import action

class MyMind:

    def decide(self):
        return action.move()
decise
由平台调用,然后在环境中验证和执行操作

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
问题在于,如果某个操作无效,则会引发异常,stacktrace不会向用户提供信息,即它不会提供有关其
decise
实现的任何信息<代码>决定可能非常复杂,如果没有关于它执行路径的任何信息,调试可能非常困难。我想知道是否有一种简单的方法可以在堆栈跟踪中包含
decise
。当然,我理解为什么它不在堆栈跟踪中,但我想在引发异常的地方(或沿着这些线的某个地方)进行“伪造”


我试图通过使用
sys.settrace
,在
decise
中记录堆栈帧,并使用
inspect
从帧中获取源代码来实现这一点。我可以通过类似于
traceback
的方式得到一个非常好的摘要,但是它非常粗糙,我不知道如何最好地将它合并到一个异常中。我觉得必须有一个更简单的方法,任何建议都将不胜感激。

你能让
我记住。decision
引发异常本身,而不是不返回异常吗?不,因为它是由用户编写的,他们可以在decise中编写任何他们想要的内容。我正在验证返回的内容,这是引发异常的地方-检查操作是否为None只是一个玩具示例。真正的验证更复杂。你无法识别
decise
的任何部分,那么为什么不只识别提供方法的类呢?@davishering我不确定我是否理解你的意思,但整个类都是由用户编写的。@BenedictWilkinsAI:因为返回值有问题,所以任何“堆栈跟踪”必须指明
return
语句(如果有多个语句,则不知道是哪个)。所以说哪个类(以及哪个
decise
)是你能做的最好的,而且很简单。你能让
MyMind.decise
引发异常本身,而不是不返回异常吗?不,因为它是由用户编写的,他们可以在decise中编写他们想要的任何内容。我正在验证返回的内容,这是引发异常的地方-检查操作是否为None只是一个玩具示例。真正的验证更复杂。你无法识别
decise
的任何部分,那么为什么不只识别提供方法的类呢?@davishering我不确定我是否理解你的意思,但整个类都是由用户编写的。@BenedictWilkinsAI:因为返回值有问题,所以任何“堆栈跟踪”必须指明
return
语句(如果有多个语句,则不知道是哪个)。所以说哪一类(从而决定哪一类)是你能做的最好的,而且很容易。