gpt4 book ai didi

python - 如何收集几个错误以总结这些错误?

转载 作者:行者123 更新时间:2023-12-03 08:00:26 25 4
gpt4 key购买 nike

以下示例仅是一个hack原因,我不了解它:

class ErrorCollector(Exception):
def __init__(self):
self.errors = []

def __nonzero__(self):
return bool(self.errors)

def do_something(a, b):
err = ErrorCollector()
try:
int(a)
except Exception:
err.errors.append('{!r} fails'.format(a))
try:
int(b)
except Exception:
err.errors.append('{!r} fails'.format(b))
if err:
raise err

def run(*args):
err = ErrorCollector()
for arg in args:
try:
do_something(*arg)
except Exception as e:
err.errors.extend(e.errors)
if err:
print 'You have these problems:\n{}'.format('\n'.join(err.errors))

我该如何做得更好?我的一个较早的解决方案是收集列表中的错误描述,并将其传递给错误实例。因此,毕竟,这类似于此处显示的解决方案。

最佳答案

这样的事情。

#!/usr/bin/env python
import functools
import inspect
import sys
import traceback


class ErrorCollector(Exception):
def __init__(self):
self.errors = []

def __enter__(self):
return self

def __exit__(self, exc_type, exc_val, exc_tb):
self.append(exc_type, exc_val, exc_tb)
if self.errors:
raise self

def append(self, exc_type=None, exc_val=None, exc_tb=None):
if exc_type is None and exc_val is None and exc_tb is None:
exc_type, exc_val, exc_tb = sys.exc_info()
if exc_type is not None and exc_val is not None and exc_tb is not None:
self.errors.append('\n'.join(traceback.format_exception(exc_type, exc_val, exc_tb)))

def __str__(self):
return '\n'.join(self.errors)

__unicode__ = __str__


def error_collector(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
with ErrorCollector() as err_collector:
names, _, _, _ = inspect.getargspec(func)
if 'err_collector' in names:
kwargs['err_collector'] = err_collector
return func(*args, **kwargs)
return wrapper


def test1():
with ErrorCollector():
print 'no errors'

with ErrorCollector() as err_collector:
try:
raise Exception('1')
except:
err_collector.append()
raise Exception('2')


@error_collector
def test2():
raise Exception('3')


@error_collector
def test3(err_collector):
try:
raise Exception('4')
except:
err_collector.append()
raise Exception('5')


if __name__ == '__main__':
try:
test1()
except Exception as e:
print e

try:
test2()
except Exception as e:
print e

try:
test3()
except Exception as e:
print e

关于python - 如何收集几个错误以总结这些错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21943097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com