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