我
first()为此编写了一个快速包装函数。
用法 :
value = first([f1, f2, f3, ..., fn], default='All failed')
#!/usr/bin/envdef first(flist, default=None): """ Try each function in `flist` until one does not throw an exception, and return the return value of that function. If all functions throw exceptions, return `default` Args: flist - list of functions to try default - value to return if all functions fail Returns: return value of first function that does not throw exception, or `default` if all throw exceptions. TODO: Also accept a list of (f, (exceptions)) tuples, where f is the function as above and (exceptions) is a tuple of exceptions that f should expect. This allows you to still re-raise unexpected exceptions. """ for f in flist: try: return f() except: continue else: return default# Testing.def f(): raise TypeErrordef g(): raise IndexErrordef h(): return 1# We skip two exception-throwing functions and return value of the last.assert first([f, g, h]) == 1assert first([f, g, f], default='monty') == 'monty'



