Python中的自定义异常

时间:2014-06-05 07:04:13

标签: python python-3.x

我试图了解如何使用try-except构造在Python中使用自定义异常。

以下是自定义异常的简单示例:

# create custom error class
class CustomError1(Exception):
    pass

我试图像这样使用它:

# using try-except
def fnFoo1(tuple1, tuple2):
    try:
        assert(len(tuple1) == len(tuple2))
    except AssertionError:
        raise(CustomError1)
    return(1)
fnFoo1((1,2), (1, 2, 3))

这会引发CustomeError1,但也会提升AssertionError,我希望将其包含在CustomError1中。

以下是我想要的,但似乎不应该处理异常的方式。

# use the custom error function without try-catch
def fnFoo2(tuple1, tuple2):
    if len(tuple1) != len(tuple2): raise(CustomError1)
    print('All done!')
fnFoo2((1,2), (1, 2, 3))

编写隐藏其他异常的自定义异常的方法是什么?

1 个答案:

答案 0 :(得分:4)

根据PEP 409,您应该能够使用raise CustomError1 from None来抑制原始异常上下文。这也记录在案here

  

使用raise new_exc from None有效地将旧例外替换为新例外用于显示目的

此功能已在Python 3.3中添加。在3.0到3.2的版本中,无法隐藏原始异常(ouch)。