首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Pycharm中的运行前显示枚举的AttributeErrors

在Pycharm中的运行前显示枚举的AttributeErrors
EN

Stack Overflow用户
提问于 2021-09-22 09:05:23
回答 1查看 36关注 0票数 1

对于枚举的子类,有没有办法在运行前在Pycharm中检测到AttributeErrors?

我有一个简单的子类Enum:

代码语言:javascript
复制
class ContentEncoding(Enum):
    UTF_8 = "utf-8"
    BINARY = "binary"

如果我尝试访问一些不存在的字段,例如:

代码语言:javascript
复制
class ContentEncoding(Enum):
    UTF_8 = "utf-8"
    BINARY = "binary"


bar = ContentEncoding.foo

Pycharm没有像我预期的那样显示通常的"Unresolved attribute reference 'foo' for class ContentEncoding。在我的例子中使用枚举的全部原因是限制ContentEncoding可以接受的值。如果没有对此进行lint检查,那么首先使用Enum似乎是毫无意义的。

编辑:

添加此Enum子类的预期用例,希望存在替代解决方案:

ContentEncoding类的预期用途是为其他编码器方法定义唯一有效的编码。

例如,假设此编码器方法如下所示:

代码语言:javascript
复制
def encode(obj, encoding: str):
    return black_box_encoder(obj, encoding)    

其中唯一有效编码字符串是"utf-8“或"binary”。所有其他字符串都会导致运行时错误。

因此,假设这个ContentEncoding类和encode方法位于某个名为mypackage的包中,并且我有一个用户导入了这个包,并希望对某些内容进行编码。

代码语言:javascript
复制
import mypackage

obj = "foo"

bar = mypackage.encode(obj, mypackage.ContentEncoding.UTF_8.value)

而不是让用户手动键入"UTF-8“并容易出现像"Utf-8”、"utf-8“等这样的错误。我希望有一个枚举(或其他对象),而不是用来预定义第二个编码参数的唯一有效值。

我想最好是在ContentEncoding中输入提示,而不是字符串,然后在encode方法中提取值。例如:

代码语言:javascript
复制
def encode(obj, encoding: ContentEncoding):
    return black_box_encoder(obj, encoding.value)    
代码语言:javascript
复制
import mypackage

obj = "foo"

bar = mypackage.encode(obj, mypackage.ContentEncoding.UTF_8)

无论如何,我仍然没有看到在运行前对适当的编码字符串进行lint/error检查的方法。如果存在其他解决方案,请将我链接到我可以阅读的内容。

需要说明的是,如果用户执行以下操作,我想让Pycharm (或其他lint检查器)以某种方式警告用户他们使用了错误的arg (在运行前):

代码语言:javascript
复制
import mypackage

obj = "foo"

bar = mypackage.encode(obj, mypackage.ContentEncoding.utf_8)
EN

回答 1

Stack Overflow用户

发布于 2021-09-22 09:11:03

PyCharm没有警告您的原因是因为您继承了实现__getattr____getattribute__方法的enum.Enum,而实现了此方法的类意味着属性访问是手动完成的,因此PyCharm无法警告您这一点。

代码语言:javascript
复制
class A:
    def __getattr__(self, item):
        return 1

class B(A):
    pass


bar = B().foo
print(bar)

结果为"1“,由于此工作是在__getattr__中动态完成的,因此PyCharm无法向我发出警告。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69281195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档