【发布时间】:2014-02-21 19:06:21
【问题描述】:
以下示例只是一个 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))
我怎样才能做得更好?我较早的解决方案是收集列表中的错误描述并将其传递给错误实例。因此,毕竟这与此处显示的解决方案相似。
【问题讨论】:
-
我怀疑有没有办法做到这一点。尽管发生了似乎不可能且完全错误的异常,但您基本上还是想运行代码,因为在定义变量的行中发生异常后,任何引用该变量的代码都会引发 NameError,对此您无能为力,但要手动处理默认值。
标签: python error-handling