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 验证手机号码、电话号码(包括最新的电信、联通和移动号码)

    一.目前的号码段(2016-12-8更新)   二.代码 package com.test; import java.util.regex.Pattern; public class CheckPho ...

  2. 微信小程序上传文件

    wx.chooseImage({ count: 1, // 默认9 sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 sourc ...

  3. ACdream 1017 [分层图][网络流]

    /* 大连热身C题 不要低头,不要放弃,不要气馁,不要慌张 题意: 给一个城市路线图,给定起点给定终点.有n个货物从起点运送到终点.城市的边是无向边. 每个货物每天如果通过某条路,那么这天这条路只能运 ...

  4. DBSCAN——python实现

    # -*- coding: utf-8 -*- from matplotlib.pyplot import * from collections import defaultdict import r ...

  5. How to pronounce symbols on keyboard

    Refefrence: http://answers.yahoo.com/question/index?qid=20100607151104AAtQxhc ~ “tilde” or “tweedle” ...

  6. 交换机做Channel-Group

    core1#conf tEnter configuration commands, one per line.  End with CNTL/Z.core1(config)#inter range g ...

  7. sax/dom/jdom/dom4j的区别

    sax/dom/jdom/dom4j的区别[转] 博客分类: xml   网上能够查到很多的4种解析方式的区别,我再做一下摘录和总结,顺带给自己做个备份. SAX sax分析器在对xml文档进行分析时 ...

  8. QTP操作word文档

    QTP可以对word文档进行操作,这里最主要展示的是向word文档写入内容,并保存的功能. Option explicit Dim wordApp Set wordApp = createobject ...

  9. 前端学习实践笔记--JavaScript深入【2】

    趁热继续再来学习一波,接下来主要介绍函数,object,数组,面向对象,new实例化. 在介绍“对象”之前,首先得梳妆打扮一番吧,那这梳妆打扮主要有两条路线,一条是淑女范(利用函数对象化),一条是邻家 ...

  10. Django快速学习搭建blog项目

    新手学习Django,本文学习的文档是<Django Web开发指南>.好了我也是新手,没什么好说了,go!- 首先先确定环境,我是在linux(Ubuntu14.04 gnome)下. ...