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):
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
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
return xxx
B()