上QQ阅读APP看书,第一时间看更新
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从句恰当地处理,否则,同样有可能造成程序终止。