日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中定义的函数不掉用不会执行_如果出现异常/错误,如何不在python中停止执行其他函数...

發布時間:2024/10/5 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中停止执行其他函数...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。