python中定义的函数不掉用不会执行_如果出现异常/错误,如何不在python中停止执行其他函数...
我有一個用python編寫的腳本,它的工作方式如下所示。每個函數執行完全不同的任務,彼此不相關。我的問題是,如果函數2()在執行過程中出現問題,那么函數3()、函數4()、函數5()將不會執行。我知道你會說通過捕獲異常來處理這個問題(嘗試..except),但是我必須捕獲不是我要查找的每個異常。簡而言之,如果函數中的任何一個有問題,我如何在不影響其他函數的地方進行編碼。理想情況下,它應該排除有問題的函數,讓另一個函數執行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21def function1():
some code
def function2():
some code
def function3():
some code
def function4():
some code
def function5():
some code
if __name__ == '__main__':
function1()
function2()
function3()
function4()
function5()
兩種想法:你不必僅僅通過不命名具體的異常來捕捉每一個異常,對吧?我想這應該管用…或者只在function1()的末尾執行function2(),所以如果前面有錯誤,它不會走得太遠,也不會提前中斷。
如果異常處理是由代碼長度引起的問題,您可以編寫一個函數,將您的所有函數"包裝"在像def wrap_em(func_list): for func in func_list: try: func except: continue這樣的try - except塊中。
@諾查丹瑪斯-問題是我嘗試了你剛才提到的。基本上,我的函數包含幾個網絡爬蟲。所以我不確定我的功能何時會中斷。因此,在這種情況下,根據哪個函數會有問題來堆積它們是行不通的。
@科尼斯-這是一個解決方案,但讓我們看看其他人有什么要說的。
不需要寫多個try/except。創建函數列表并執行它們。例如,您的代碼應該如下所示:
1
2
3
4
5
6
7
8if __name__ == '__main__':
func_list = [function1, function2, function3, function4, function5]
for my_func in func_list:
try:
my_func()
except:
pass
或者,創建一個decorator并將該decorator添加到每個函數中。查看python函數修飾符指南。例如,您的裝飾應該是:
1
2
3
4
5
6
7def wrap_error(func):
def func_wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except:
pass
return func_wrapper
現在,將這個帶有函數定義的裝飾器添加為:
1
2
3@wrap_error
def function1():
some code
添加了這個修飾符的函數不會引發任何Exception。
我看到的唯一問題就是論點。不能向正在運行的函數傳遞參數。
@Ev.Kounis你可以。在這種情況下,您需要將其設置為dict,而不是list。Key是函數,value是參數。數據結構取決于要求:)
從python 3.4開始,添加了一個新的上下文管理器,名為contextlib.suppress,根據文檔:
Return a context manager that suppresses any of the specified exceptions if they occur in the body of a with statement and then resumes execution with the first statement following the end of the with statement.
為了抑制所有異常,您可以將其用作:
1
2
3
4
5
6
7from contextlib import suppress
if __name__ == '__main__':
with suppress(Exception): # `Exception` to suppress all the exceptions
function1()
function2()
# Anything else you want to suppress
您可以使用異常并捕獲類似于此的所有類型的異常
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17if __name__ == '__main__':
try:
function1()
except:
pass
try:
function2()
except:
pass
try:
function3()
except:
pass
try:
function4()
except:
pass
對于大量的函數,您可以使用
1
2
3
4
5
6
7
8
9
10func_dict = {
func1 : {
param1 : val
param2 : val
},
func1 : {
param1 : val
param2 : val
}
}
因此,可以迭代函數的字典鍵并迭代參數
據我所知,這是歐普明確表示他不想擁有的。
我所理解的是,他正計劃寫下每一個可能明確出現的例外。但相反,他能抓住所有的例外
因為我的函數包含大約15個網絡爬蟲,用這種方式編碼并不是Python式的,所以這種方法是不可行的。
那么字典似乎是正確的方法
總結
以上是生活随笔為你收集整理的python中定义的函数不掉用不会执行_如果出现异常/错误,如何不在python中停止执行其他函数...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redismanager 获取不到yml
- 下一篇: websocket python爬虫_p