zoukankan      html  css  js  c++  java
  • 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()
     
     
     
  • 相关阅读:
    Spring快速开启计划任务
    一张图告诉你什么是系统架构师
    一张图搞清楚Java异常机制
    Spring Cloud配置中心内容加密
    Spring Cloud配置中心高可用搭建
    Spring Cloud动态刷新配置信息
    Spring Boot实现热部署
    Spring Boot集成Mybatis双数据源
    (1)python tkinter-窗体
    (1)html基础
  • 原文地址:https://www.cnblogs.com/meitian/p/6134997.html
Copyright © 2011-2022 走看看