避免 try/except 块的代码重复,来自 class
Avoid code duplication of try/except blocks, from a class
我有一个 class Test
,它是另一个的子 class(它已经是一个上下文管理器,为了简单起见,我在这里选择 nullcontext
)。
如何避免重复 try
/except
块,并在 class 中直接 定义?
与 及其答案不同,我想使用 class 而不是创建新函数。
示例:
import contextlib
class Test(contextlib.nullcontext):
pass
try:
with Test('abc') as t1:
do_something(t1)
do_something_else()
except ValueError: # these exceptions are thrown from Test's parent
print('a') # class/context-manager methods (nullcontext in this example)
except KeyError:
print('b')
try:
with Test('def') as t2:
do_something(t2)
do_this(t2)
except ValueError:
print('a')
except KeyError:
print('b')
TL;DR:如何将 try:
、except ValueError:
、except KeyError:
移动到 class Test
?
将代码放在 __init__
中是否可以解决您的问题?
import contextlib
class Test(contextlib.nullcontext):
def __init__(self, abc, *args, **kwargs):
super().__init__(*args, **kwargs)
try:
if abc == 'def':
raise ValueError("VALUEERROR")
elif abc == 'ghi':
raise KeyError("KEYERROR")
else:
print("OK")
except ValueError:
print('a')
except KeyError:
print('b')
x1 = Test('abc')
x2 = Test('def')
x3 = Test('ghi')
我有一个 class Test
,它是另一个的子 class(它已经是一个上下文管理器,为了简单起见,我在这里选择 nullcontext
)。
如何避免重复 try
/except
块,并在 class 中直接 定义?
与
示例:
import contextlib
class Test(contextlib.nullcontext):
pass
try:
with Test('abc') as t1:
do_something(t1)
do_something_else()
except ValueError: # these exceptions are thrown from Test's parent
print('a') # class/context-manager methods (nullcontext in this example)
except KeyError:
print('b')
try:
with Test('def') as t2:
do_something(t2)
do_this(t2)
except ValueError:
print('a')
except KeyError:
print('b')
TL;DR:如何将 try:
、except ValueError:
、except KeyError:
移动到 class Test
?
将代码放在 __init__
中是否可以解决您的问题?
import contextlib
class Test(contextlib.nullcontext):
def __init__(self, abc, *args, **kwargs):
super().__init__(*args, **kwargs)
try:
if abc == 'def':
raise ValueError("VALUEERROR")
elif abc == 'ghi':
raise KeyError("KEYERROR")
else:
print("OK")
except ValueError:
print('a')
except KeyError:
print('b')
x1 = Test('abc')
x2 = Test('def')
x3 = Test('ghi')