Python,区分自定义异常

Python,区分自定义异常,python,exception-handling,Python,Exception Handling,对于Python来说,这里是相当新的。有以下代码: def someFunction( num ): if num < 0: raise Exception("Negative Number!") elif num > 1000: raise Exception("Big Number!") else: print "Tests passed" try: someFunction(10000) exc

对于Python来说,这里是相当新的。有以下代码:

def someFunction( num ):
    if num < 0:
        raise Exception("Negative Number!")
    elif num > 1000:
        raise Exception("Big Number!")
    else:
        print "Tests passed"


try:
    someFunction(10000)
except Exception:
    print "This was a negative number but we didn't crash"
except Exception:
    print "This was a big number but we didn't crash"
else:
    print "All tests passed and we didn't crash"
def someFunction(num):
如果num<0:
引发异常(“负数!”)
elif num>1000:
引发异常(“大数字!”)
其他:
打印“测试通过”
尝试:
someFunction(10000)
除例外情况外:
打印“这是一个负数,但我们没有崩溃”
除例外情况外:
打印“这是一个很大的数字,但我们没有崩溃”
其他:
打印“所有测试都通过,我们没有崩溃”

我最初使用了
raise“Negative Number!”
etc,但很快发现这是一种老方法,必须调用Exception类。现在它运行良好,但我如何区分我的两个例外?对于下面的代码,它正在打印“这是一个负数,但我们没有崩溃”。任何关于这方面的建议都会很好。谢谢

如果希望能够区分发生的异常类型,则需要创建自己的异常类。示例(我继承自
ValueError
,因为我认为这是最接近您想要的-如果区别不重要,它还允许您捕获
ValueError
):

class NegativeError(ValueError):
通过
类BigNumberError(ValueError):
通过
def someFunction(num):
如果num<0:
引发NegativeError(“负数!”)
elif num>1000:
引发BigNumberError(“大数字!”)
其他:
打印“测试通过”
尝试:
someFunction(10000)
除消极错误外,如e:
打印“这是一个负数,但我们没有崩溃”
打印e
除BigNumberError为e外:
打印“这是一个很大的数字,但我们没有崩溃”
打印e
其他:
打印“所有测试都通过,我们没有崩溃”

请参见。您通常不会引发
异常,但会引发它的一些子类。感谢您提供了这一伟大的解决方案。NegativeError as e是否等同于NegativeError,e?@Kex,
NegativeError as e
将适用于python2和python2.7中的3(我认为…);Python3只接受带有
的语法作为
class NegativeError(ValueError):
    pass

class BigNumberError(ValueError):
    pass

def someFunction( num ):
    if num < 0:
        raise NegativeError("Negative Number!")
    elif num > 1000:
        raise BigNumberError("Big Number!")
    else:
        print "Tests passed"

try:
    someFunction(10000)
except NegativeError as e:
    print "This was a negative number but we didn't crash"
    print e
except BigNumberError as e:
    print "This was a big number but we didn't crash"
    print e
else:
    print "All tests passed and we didn't crash"