Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.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_Python 3.x - Fatal编程技术网

在抛出异常之前操纵异常的堆栈跟踪(Python)

在抛出异常之前操纵异常的堆栈跟踪(Python),python,python-3.x,Python,Python 3.x,我正在用Python开发一个惰性计算库,它允许用户编写普通代码,而在稍后的时间点对其进行计算。一个问题是,例外情况相当混乱。这就是为什么我想抛出带有修改堆栈跟踪的异常。它应该看起来像是在根本没有延迟计算的情况下触发的异常(或者只是有一个简短的提示) 这是我已经尝试过的。我没有找到更好的回溯方法,但如果可能的话,我不希望在create_tb中抛出异常 import sys def create_tb(): # Capture the stack trace try: raise E

我正在用Python开发一个惰性计算库,它允许用户编写普通代码,而在稍后的时间点对其进行计算。一个问题是,例外情况相当混乱。这就是为什么我想抛出带有修改堆栈跟踪的异常。它应该看起来像是在根本没有延迟计算的情况下触发的异常(或者只是有一个简短的提示)

这是我已经尝试过的。我没有找到更好的回溯方法,但如果可能的话,我不希望在create_tb中抛出异常

import sys

def create_tb():  # Capture the stack trace
  try:
    raise Exception("A")
  except:
    _, _, tb = sys.exc_info()
    return tb


def raise_with_tb(tb):  # It should look like "B" was triggered in create_tb
  raise Exception("B").with_traceback(tb)


tb = create_tb()
raise_with_tb(tb)
但结果是:

Traceback (most recent call last):
  File ".../test.py", line 16, in <module>
    raise_with_tb(tb)
  File ".../test.py", line 12, in raise_with_tb
    raise Exception("B").with_traceback(tb)
  File ".../test.py", line 5, in create_tb
    raise Exception("A")
Exception: B
这可能吗


我对Python比较陌生。如果有更多的植物学方法来实现我的目标,我很高兴得到建议。

我找到了一种方法来抑制以前发生的异常的上下文:

try:
    raise Exception('original exception message')
except Exception as exc:
    my_custom_exception = Exception('my custom message')
    my_custom_exception.__suppress_context__ = True
    raise my_custom_exception
它提供了以下回溯:

Traceback (most recent call last):
  File "ex.py", line 6, in <module>
    raise my_custom_exception
Exception: my custom message

但我不确定它1)是否是python方式2)是否真的是您所需要的。

我找到了一种方法来抑制以前发生的异常的上下文:

try:
    raise Exception('original exception message')
except Exception as exc:
    my_custom_exception = Exception('my custom message')
    my_custom_exception.__suppress_context__ = True
    raise my_custom_exception
它提供了以下回溯:

Traceback (most recent call last):
  File "ex.py", line 6, in <module>
    raise my_custom_exception
Exception: my custom message

但我不确定1)是不是蟒蛇式的方式2)是你真正需要的。

谢谢。知道这一点很有用,但不能解决我的问题。谢谢。了解这一点很有用,但不能解决我的问题。