Python,区分自定义异常
对于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
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"