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通过自定义异常,提前退出方法的更多相关文章

  1. sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO

    sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO 今天在弄一个 sqlalchemy 的数据库基类的时候,遇到了跟多继承相关的一个小问题,因此顺便看了一 ...

  2. python获取命令行参数的方法(汇总)

    介绍python获取命令行参数的方法:getopt模和argparse模块. python版本:2.7 一.getopt模块 主要用到了模块中的函数: options, args = getopt.g ...

  3. Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究

    Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究 一丶反射 什么是反射: ​ 反射的概念是由Smith在1982年首次提出的 ...

  4. Python列表,元组,字典,字符串方法笔记

    01. 列表 1.1 列表的定义 List(列表) 是 Python 中使用 最频繁 的数据类型,在其他语言中通常叫做 数组 专门用于存储 一串 信息 列表用 [] 定义,数据 之间使用 , 分隔 列 ...

  5. 【转】C#中WinForm程序退出方法技巧总结

    C#中WinForm程序退出方法技巧总结 一.关闭窗体 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.Ex ...

  6. 用 Python 排序数据的多种方法

    用 Python 排序数据的多种方法 目录 [Python HOWTOs系列]排序 Python 列表有内置就地排序的方法 list.sort(),此外还有一个内置的 sorted() 函数将一个可迭 ...

  7. Android经典完美退出方法

    Android经典完美退出方法,使用单例模式创建一个Activity管理对象,该对象中有一个Activity容器(具体实现自己处理,使用LinkedList等)专门负责存储新开启的每一个Activit ...

  8. C#中WinForm程序退出方法技巧总结(转)

    本文实例总结了C#中WinForm程序退出方法技巧.分享给大家供大家参考.具体分析如下: 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit ...

  9. python子类调用父类的方法

    python子类调用父类的方法 python和其他面向对象语言类似,每个类可以拥有一个或者多个父类,它们从父类那里继承了属性和方法.如果一个方法在子类的实例中被调用,或者一个属性在子类的实例中被访问, ...

随机推荐

  1. Java中遍历Map集合的四种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  2. 第一篇英文短文《It All Starts With A Dream》

    http://www.ximalaya.com/#/17209107/sound/6883165 Dreaming. Do you or don’t you? Do you dream about t ...

  3. 【VB6】vbRichClient5.cWebServer实现一个简单web服务器

    Option Explicit Private WithEvents k As vbRichClient5.cWebServer Private Sub Command1_Click() Set k ...

  4. autoit 将输入法修改为英文输入法

    如果能用ControlSend,就不推荐用send,如果非要用send,可以切换输入法为英文再send. $hWnd = WinGetHandle("[ACTIVE]");$hWn ...

  5. 2.2 ARM处理器工作模式

    ARM Architecture Reference Manual Arm 指令框架手册 种工作模式 Processor mode Mode number Description User usr 0 ...

  6. 冒泡排序,sql分页语句

    对数组中的数字进行排序 public int[] PopSmall(int[] IntArray) { ; ; i < IntArray.Length - ; i++) { ; j < I ...

  7. 关于ORACLE中配置文件的问题

    关于windows服务和oracle的问题的解决 <?xml version="1.0" encoding="utf-8"?><configu ...

  8. linux查看负载

    LINUX下查看负载 1,查看磁盘 df -h 2,查看内存大小 free free [-m|g]按MB,GB显示内存 vmstat 3,查看cpu cat /proc/cpuinfo 只看cpu数量 ...

  9. Android开发--Socket通信

    一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时 ...

  10. MES系统学习

    MES系统是当今制造型企业信息化的热点,而统一建模语言UML是面向对象建模的标准语言,在软件工程发挥着重要作用.MES系统如何进行UML建模呢,今天和大家重点讨论一下MES系统的UML建模方法,请看本 ...