gpt4 book ai didi

python继续,除非条件不满足

转载 作者:太空狗 更新时间:2023-10-29 21:29:39 25 4
gpt4 key购买 nike

我经常发现自己想做这样的事情,我有一些像这样的 try excepts 包裹

item= get_item()
try:
do_work(item)
except SomeError as err:
if err.code == 123:
do_something(item)
else:
# Actually I don't want to do something with this error code... I want to handle in 'except'
except:
put_back(item)
raise

有没有办法从 else 提升到下面的 except block ? (一个 continue 会很好)我​​最终做了如下不干净的事情

item= get_item()
try:
try:
do_work(item)
except SomeError as err:
if err.code == 123:
do_something(item)
else:
raise
except:
put_back(item)
raise

有什么办法吗?

最佳答案

如果您使用的是最新的 python 版本(2.5 及更高版本),您应该切换到使用 context manager相反:

class WorkItemContextManager(object):
def __enter__(self):
self.item = get_item()
return self.item

def __exit__(self, exc_type, exc_value, tb):
if exc_type is not None:
if exc_type is SomeError and exc_value.code == 123:
do_something(self.item)
return True # Exception handled
put_back(self.item)

然后:

with WorkItemContextManager() as item:
do_work(item)

如果处理了异常,__exit__ 方法可以返回 True;返回 None 将重新引发 with block 中引发的任何异常。

如果不是,则您正在寻找 finally block :

item = get_item()
try:
do_work(item)
item = None
except SomeError as err:
if err.code == 123:
do_something(item)
item = None
finally:
if item is not None:
put_back(item)

finally 套件保证在try: 套件完成时执行, 发生异常。通过将 item 设置为 None,您基本上告诉 finally 套件一切都完成得很好,无需将其放回去。

finally 处理程序接管了您的综合 except 处理程序。如果 do_work 发生异常,item 将不会设置为 None。如果 SomeError 处理程序没有捕获异常,或者 err.code 不是 123,item 也会没有设置为 None,因此 put_back(item) 方法被执行。

关于python继续,除非条件不满足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12374694/

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