创建自定义例外或使用现有

时间:2015-03-23 14:04:32

标签: python exception python-3.x

我有一个功能:

def f(x):

    if x == 'dog':
        print('ok')
    elif x == 'cat':
        print('ok')
    else:
        raise MyException('Not an x i would expect')

如果有一天我将x更改为f()并忘记修复f(),我会添加例外,以便我可以轻松找到问题。

  1. 这是错误的方式吗?记得"在需要时更改f()
  2. 其次,f()是另一个函数的一部分,可能会得到一个处理某些异常的装饰器:

    @an_exception_handler
    def g(x):
        f(x)
        return 1000 
    

    我不希望@an_exception_handler意外处理MyException(例如,如果MyExceptionValueError的孩子,@an_exception_handler处理{{} 1}})。

    1. ValueError应该是自定义异常,还是使用现有的很少发生的异常?

1 个答案:

答案 0 :(得分:-1)

如果你真的不想让MyException成为ValueError的子类,你绝对应该创建自己的异常类,除非你找到另一个描述异常同样好的异常类。

老实说,你处理“所有ValueError但是这个”的方式(并且概念上这绝对是一个ValueError)感觉有些不一致。你想用它做什么?

正如PM 2Ring在他的评论中指出的那样,断言也是一个很好的方法。可能比另一个例外更好。