python - 在python中处理递归错误回溯

标签 python recursion error-handling

我正在努力在Python中实现小型编程语言,而该语言的执行基本上包括对名为execute的函数的递归调用。我已经实现了自己的错误处理,但是为了进行该错误处理,我需要捕获一些异常并将它们作为我自己的类型抛出,从而导致代码如下所示:

def execute(...):
    try:
        try:
            # do stuff
        except IndexError:
            raise MyIndexError()
    except MyErrorBase as e:
        raise MyErrorBase(e, newTracebackLevel) # add traceback level for this depth

我真的很讨厌嵌套的try块...有什么办法可以解决这个问题?

最佳答案

如果确实要执行此操作,请尝试在基本异常类型和新异常类型之间创建映射:

exceptionMap = {
   IndexError: MyIndexError,
   # ...
}

def execute(...):
    try:
        # do stuff
    except tuple(exceptionMap) as e:
        raise exceptionMap[type(e)](e, newTracebackLevel)

例:
In [33]: exceptionMap = {IndexError: RuntimeError}

In [34]: a = []

In [35]: try:
    ...:     a[1]
    ...: except tuple(exceptionMap) as e:
    ...:     raise exceptionMap[type(e)](str(e))

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-35-bc6fdfc44fbe> in <module>()
      2     a[1]
      3 except tuple(exceptionMap) as e:
----> 4     raise exceptionMap[type(e)](str(e))
      5
      6

RuntimeError: list index out of range

关于python - 在python中处理递归错误回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39059859/

相关文章:

error-handling - AST具有固定节点而不是antlr中的错误节点

c# - 我在C#应用程序中遇到此错误,找不到column2

python - 如何解压 df 中的列表并在该列表上使用加法而不进行循环

java 树节点递归泛型

c - 堆栈问题: Local variables vs Arithmetics

javascript - 如何在Javascript中用递归替换循环?

python - 提高网页抓取的速度/性能,但有很多异常(exception)情况

python - 如何在HUE中调用FileBrowser

python - 用于 bitstamp API 的 Lua 与 Python。 Python 代码有效但 Lua 无效。为什么?

python - Matplotlib 颜色条刻度定位 - matplotlib 版本之间的更改?