0

我有一个类,它有一个 enum.Flag 类型的实例变量。它的实现__getattr__使我可以返回由名称给出的标志的布尔状态。

该代码在没有调试的情况下运行良好,产生预期的输出。

代码示例无需调试即可运行。 控制台输出。

但是,当我使用 Visual Studio 调试器(VS 2019、16.7.4、Python 3.6、64 位)运行它时,它总是在__getattr__方法中停止,我需要继续 100 次,直到我可以正常继续。我没有设置断点!

VS 2019 调试器在 __getattr__ 中停止

我在 IDLE 中测试了相同的代码。IDLE在调试期间不会停止在getattr中!

我怎样才能摆脱那些烦人的误报干扰我的调试会话?

from enum import Flag, auto
from copy import deepcopy

class MyFlags(Flag):
    FOO = auto()
    BAR = auto()
    BAZ = auto()

class Features:
    __slots__ = ('_features', )
    
    def __init__(self, bitmask):
        self._features = bitmask

    @property
    def bitmask(self):
        return self._features

    def __getattr__(self, attr):
        try:
            return bool(MyFlags[attr].value & self._features)

        except:
            raise AttributeError(attr)

f = Features(5)

print(f.bitmask)
print(f.FOO)
print(f.BAR)
print(f.BAZ)

f = Features(3)

print(f.bitmask)
print(f.FOO)
print(f.BAR)
print(f.BAZ)

g = deepcopy(f)

print(f.bitmask)
print(f.FOO)
print(f.BAR)
print(f.BAZ)
4

0 回答 0