python通过自定义异常,提前退出方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python通过自定义异常,提前退出方法相关的知识,希望对你有一定的参考价值。

python退出的操作,搜索后都是return、exit()等
return:退出一个方法,并返回一个值
exit():退出python
 
想要实现的功能:
方法A中调用多个方法,方法B、方法C...,方法B有一个开关,是否结束方法A。如果标记结束就直接退出方法A,继续执行其他的方法。
 
总的过程如下:
print(“执行A之前的方法")
def A():
     B(isfinished=“true")
     C()
print(“方法A结束了,但是这句还要执行")
 
问题:
可以这么实现:
print(“执行A之前的方法")
def A():
     B()
     return
     C()
print(“方法A结束了,但是这句还要执行")
 
或者这么实现:
print(“执行A之前的方法")
def A():
     B(isfinished=“true")
     if isfinished==“true”:
          return
     C()
print(“方法A结束了,但是这句还要执行")
 
但是第一种需要每次都手动改代码,第二种方法要加很多冗余代码(我有很多方法需要用isfinished来做开关),但是我只想通过开关isfinished来判断是否退出A()
 
解决方法:
通过B()中抛出一个异常,然后提前结束方法A
 
第一步:自定义一个异常,继承Exception即可
class FinishedException(Exception):
    def __init__(self,value):
            self.value=value
(如果不用记录参数,就不需要写value等)
 
第二步:通过raise抛出异常,外层方法catch住这个异常即可
try:
    raise FinishedException(“这个方法给出异常")
except FinishedException as e:
    print(e)
 
第三步:通过装饰器统一对异常进行处理,简化代码
def wrapper(func):
    def _func(*args):
        try:
            func(*args)
        except FinishedException as e:
            print("[",e,"]为最后一个要执行的case,不执行接下来的操作,退出当前流程")
        except Exception as e:
            print("用例出错:",e)
    return _func
def wrapper_basecase(isfinished=“false")
def _func(*args):
     if isfinished == "true":
     raise FinishedException(name)
 
使用装饰器+异常的例子:
@wrapper
def A(driver,iteration=2):
    @wrapper_basecase(isfinished="true")
    def B():
        return xxx
    B()
 
 
 


以上是关于python通过自定义异常,提前退出方法的主要内容,如果未能解决你的问题,请参考以下文章

python所有的内置类型汇总

自定义异常

python__基础 : 异常处理与自定义异常

python 自定义异常/raise关键字抛出异常

3.自定义异常

Python 约束 , 自定义异常 , 加密 , 日志