避免 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')