python 運行多個函數,如何讓單個函數的報錯不影響其他函數的執行
問題描述
假設有 a , b , c 三個函數需要執行,但是有可能會其中某個函數會報錯
最初的寫法是:
try: a() b() c()except: pass
這樣寫的問題是如果 b 報錯了,c 也不會執行了,想到可以在函數內部定義 try ,由此想到用裝飾器來搞:
def error(fun): def wrapped():try: fun()except: print(’這個函數出錯了:%s’ % fun.__name__) return wrapped@errordef a(): print( 1 / 0)@errordef b(): print(0 / 1) @errordef c(): print(’1111’)
這樣看問題勉強是解決了,但是每個函數頭上都頂個裝飾器,感覺有點二,所以問問有沒有更優雅的實現方法
實際上的代碼是運行一堆爬蟲,每個爬蟲都是不同的網頁,有可能會報錯,但是我不想讓單個網頁的報錯影響到其他爬蟲的執行
問題解答
回答1:不知道你要的「更優雅的實現方法」是什么。忽略所有函數的錯誤本來就很不優雅了。
當然你可以寫一個這種函數:
import tracebackdef run_with_ignorance(*funcs): for f in funcs: try: f() except Exception: traceback.print_exc()
然后這么調用:
run_with_ignorance(a, b, c)
