• 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()
     
     
     
  • 相关阅读:
    理解WebKit和Chromium: Chromium的多线程机制
    java.lang.IllegalStateException: Web app root system property already set to different value
    MySQL 深入剖析 char varchar 类型,有了VARCHAR,为什么还要有CHAR?
    Ubuntu包管理命令大全,包括apt命令和dpkg命令
    GHashTable不能以字符串作为key,可以使用data list来代替
    LFS全过程历险
    忘记了root密码怎么办?
    ArchLinux安装几天的经验总结、bug修正和软件配置
    mplayer加载srt字幕乱码,或是下划线等问题解决
    从串口登录Linux主机
  • 原文地址:https://www.cnblogs.com/meitian/p/6134997.html
Copyright © 2020-2023  润新知