4.2.1 通过raise抛出异常

之前我们看到的触发异常的场景都是定义在Python语法里的,比如除以0的异常。如果要触发其他异常,就需要通过raise来完成,比如在如下的RaiseDemo.py范例中触发基于业务场景规则的异常。


01 # coding=utf-8
02 def handleOrder(name,number):
03     if(number<=0):
04         raise Exception('Order Number less than 0')
05     else:
06         print('Handler Order Correctly')
07 handleOrder('PythonBook',1) # Handler Order Correctly
08 handleOrder('PythonBook',-1) # 会触发异常,程序中断
09 print('continue')  # 这句不执行

在第2行定义的处理订单的handleOrder方法里,第二个参数表示订单里的商品数量,按业务规则,它不可能小于或等于0,于是在第3行通过if语句判断该参数,如果数量不对则通过第4行的raise语句抛出异常,这里还通过Exception的参数指定了异常提示文字。

在第8行调用handleOrder方法时,由于第二个参数是-1,因此会触发第4行raise语句抛出的异常。由于这里没有对应的except从句处理,因此程序会终止,而不会执行之后第9行的语句。

由此我们可以归纳出通过raise抛出异常的实施要点。第一,可以通过raise抛出诸如业务层面的异常,当然也可以根据实际场景抛出Python语法框架内的异常。第二,通过raise抛出的异常也应该被except从句恰当地处理,否则,同样有可能造成程序终止。