PEP8插件在Sublime 3中破坏了我的类型提示代码

2024-09-27 07:34:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我不得不禁用保存时的格式设置,因为Python PEP8 Autoformat插件重新格式化了我的代码,导致语法错误

我的代码(关注最后几行):

from typing import List, Tuple
from my_enent import MyEvent


def my_preprocessor(raw_event, context: object, env: MyEnv) \
        -> Tuple[dict, VideoFreezeEvent]:
    if isinstance(raw_event, dict) and 'Output' in raw_event:
        # comments
        raw_state_machine_event = json.loads(raw_state_machine_event['Output'])
    # comments
    parallel_outputs = raw_state_machine_event.get(
        'my_data').get('parallel_outputs')
    if len(parallel_outputs) > 0:
        state_machine_event = parallel_outputs[0]
        my_list: List[MyEvent] = [
            my_util.populate_dataclass(MyEvent, event)
            for event in parallel_outputs
        ]
        another_event = events_list[0]

插件重新格式化代码后,导致语法错误的代码相关部分变为:

   if len(parallel_outputs) > 0:
       state_machine_event = parallel_outputs[0]
       my_list:
           List[MyEvent] = [
               my_util.populate_dataclass(MyEvent, event)
               for event in parallel_outputs
           ]
       another_event = events_list[0]

我如何防止/教导插件不破坏此代码


如果首先存在通道,则可能是通过的一些包设置:

{
    // list codes for fixes; used by --ignore and --select
    "list-fixes": false,

    // do not fix these errors / warnings (e.g. [ "E501" , "E4" , "W"])
    "ignore": [],

    // select errors / warnings (e.g. ["E4", "W"])
    "select": [],

    // Maximum line length
    "max-line-length": 79
}

Tags: 代码in插件eventforrawifparallel
3条回答

你的linter听起来好像已经过时了,因为它既不能识别walrus operator ^{}也不能识别你的类型注释。查看插件的Package Control page,您可以看到它的顶部写着“缺少”,这意味着源代码repo已经消失,很可能是因为它不再被维护了。该软件包最近一次修改是在5年前,而且最近没有安装,所以有非常有力的证据表明它已经死了

作为替换插件,我强烈推荐Anaconda (与Anaconda Python发行版无关)。它工作得很好(大部分情况下),正在积极开发中,具有频繁的更新、错误修复和新功能,并且可以完成代码完成和代码智能以及linting/autoformatting。该网站将介绍您需要进行的所有配置,以及如何关闭和打开不同的功能。有几个不同的linting/formatting选项可供选择,包括AutoPEP8、PyFlakes和PyLint。我真的很喜欢

(不,我与它或它的作者没有任何联系。)

我找到了解决办法。转到插件设置(首选项->;软件包设置->;Python PEP8自动格式化->;…),添加忽略规则,例如:

{
  // Workaround for typing hints
  "ignore": ["E701"],
}

我猜它忽略了这个警告:https://www.flake8rules.com/rules/E701.html 似乎不是很有害

我通过pip安装了Black,并使用了sublack升华插件,该插件似乎运行顺利

MattDMo推荐的Anaconda Supreme插件很酷,但有点慢(至少有默认设置),我的Mac笔记本电脑都是全新的

相关问题 更多 >

    热门问题