gpt4 book ai didi

python - Try-Except-Else-Finally 返回 else 替代方案?

转载 作者:行者123 更新时间:2023-11-30 22:42:20 25 4
gpt4 key购买 nike

我正在开发一个可以引发多个异常的函数。我想在它们的 except block 中处理这些异常,然后使用自定义消息和回溯返回结果。问题是 finally 得到保证,因此我无法在 else block 内返回任何内容。

如果引发一些 Exception,则此代码可以工作,但如果没有 Exception,则该代码不起作用。在这种情况下,我只想返回 {'success':True}

所以从这段代码来看:

def foo():
try:
#some code
return {'success':True}
except FirstException:
tb = traceback.format_exc()
msg = 'There was FirstExc'
return {'success':False,
'tb':tb,
'msg':msg}
except SecondException:
tb = traceback.format_exc()
msg = 'There was SecondExc'
return {'success':False,
'tb':tb,
'msg':msg}
...

我不想重复返回。我尝试过:

def foo():
try:
pass
except FirstException:
tb = traceback.format_exc()
msg = 'There was FirstExc'
except SecondException:
tb = traceback.format_exc()
msg = 'There was SecondExc'
else:
return {'success':True}
finally:
return {'success':False,
'tb':tb,
'msg':msg}

你知道怎么做吗?我知道我可以将 return {'success':True} 放入 try block 中,删除 finallyelse block 并将 return {'success':False,'tb':tb,'msg':msg} 添加到每个 except block 中,但有很多 except block ,因此代码将重复多次。

还有其他选择吗?

最佳答案

不要使用finally block 。您希望仅在出现异常时返回 False,否则返回 Truefinally 中的返回始终适用于这两种情况。

您可以从两个除了套件返回,也可以合并套件。

从两者返回会导致更多重复:

def foo():
try:
pass
except FirstException:
tb = traceback.format_exc()
msg = 'There was FirstExc'
return {'success':False,
'tb':tb,
'msg':msg}
except SecondException:
tb = traceback.format_exc()
msg = 'There was SecondExc'
return {'success':False,
'tb':tb,
'msg':msg}
else:
return {'success':True}

您可以将 except 套件合并为一个:

def foo():
try:
pass
except (FirstException, SecondException) as e:
tb = traceback.format_exc()
exception_type = 'FirstExc' if isinstance(e, FirstException) else 'SecondExc'
msg = 'There was {}'.format(exception_type)
return {'success':False,
'tb':tb,
'msg':msg}
else:
return {'success':True}

另一种选择是首先构建返回值,然后根据需要添加信息:

def foo():
result = {'success': True}
try:
pass
except FirstException:
tb = traceback.format_exc()
msg = 'There was FirstExc'
result = {'success': False, 'tb': tb, 'msg': msg}
except SecondException:
tb = traceback.format_exc()
msg = 'There was SecondExc'
result = {'success': False, 'tb': tb, 'msg': msg}
finally:
return result

这与 return-from-the- except-suite 选项实际上并没有什么不同。

关于python - Try-Except-Else-Finally 返回 else 替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42177776/

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