python 运行多个函数,如何让单个函数的报错不影响其他函数的执行
PHPz
PHPz 2017-04-18 10:29:25
0
1
626

假设有 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

@error
def a():
    print( 1 / 0)

@error
def b():
    print(0 / 1)
    
@error
def c():
    print('1111')

这样看问题勉强是解决了,但是每个函数头上都顶个装饰器,感觉有点二,所以问问有没有更优雅的实现方法

实际上的代码是运行一堆爬虫,每个爬虫都是不同的网页,有可能会报错,但是我不想让单个网页的报错影响到其他爬虫的执行

PHPz
PHPz

学习是最好的投资!

membalas semua(1)
伊谢尔伦

Saya tidak tahu "kaedah pelaksanaan yang lebih elegan" yang anda mahukan. Mengabaikan ralat untuk semua fungsi sememangnya tidak elegan.

Sudah tentu anda boleh menulis fungsi seperti ini:

import traceback

def run_with_ignorance(*funcs):
  for f in funcs:
    try:
      f()
    except Exception:
      traceback.print_exc()

Kemudian panggil seperti ini:

run_with_ignorance(a, b, c)
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan