如果在子级别函数中出错并返回标志python,则跳转到顶级函数

By simon at 2018-02-28 • 0人收藏 • 51人看过

我有一个函数“mainfunc”,从中我调用另一个函数和 等等。

class Error(Exception):
   """Base class for other exceptions"""
   pass

def main_func():
    return sub_func()

def sub_func():
    return sub_sub_func()

def sub_sub_func():
    return sub_sub_sub_func()

def sub_sub_sub_func():
    try:
        x = len(10)
        res = 'b'
    except:
        raise Error
    return res

main_func()
如果你在sub_sub_sub_func()中看到我很好e增加了一行x = len(10),这将导致 例外。 我想要的是,如果发生这种情况,我应该直接跳转到mainfunc()和 返回一个flag(str) as 'fail' 我研究了定义自定义异常,但它并没有帮助我。 我想在我加注后回来。

1 个回复 | 最后更新于 2018-02-28
2018-02-28   #1

len(10)会提高TypeError你可以捕捉到这个特定的异常 在你的main_func,并做需要的事情然后发生。 请注意,您需要创建一个错误类的实例 提高。 Error()

class Error(Exception):
    """Base class for other exceptions"""
    pass

def main_func():
    try:
        return sub_func()
    except (Error as e):
        # The raised error will be cought here.
        # Do the stuff that needs to happen here.
        return 'fail'

def sub_func():
    return sub_sub_func()

def sub_sub_func():
    return sub_sub_sub_func()

def sub_sub_sub_func():
    try:
        x = len(10) # Will raise a `TypeError`
        res = 'b'
    except:
        # `TypeError` that is raised will get here
        raise Error()
    return res

main_func()
注意:您的自定义Error会隐藏很多可以进来的信息 方便以后。发生什么事引发了这个错误。最好的把原来的 TypeError作为Error的内部例外。
try:
    x = len(10)
except Throwable as e:
    raise Error(e)
理论上在你的代码中有潜力f内存异常将被转换 不知道发生了什么。

登录后方可回帖

Loading...