python - PEP8 插件在 Sublime 3 中破坏了我的类型提示代码
问题描述
我不得不禁用保存设置的格式,因为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
}
解决方案
您的 linter 听起来好像已经过时了,因为它既不识别海象运算符:=
也不识别您的类型注释。查看插件的Package Control 页面,您可以在顶部看到“ MISSING ”,这意味着源代码仓库已经消失,很可能是因为它不再被维护了。该软件包最后一次修改是在 5 年前,并且最近没有安装,因此有非常有力的证据表明它已经死了。
作为替代插件,我强烈推荐Anaconda (与 Anaconda Python 发行版无关)。它工作得很好(大部分情况下),正在积极开发中,经常更新、错误修复和新功能,并且可以完成代码完成和代码智能以及 linting/autoformatting。该网站会完成您需要做的所有配置,以及如何关闭和打开不同的功能。有几种不同的 linting/formatting 选项可供选择,包括 AutoPEP8、PyFlakes 和 PyLint。我很喜欢。
(不,我与它或它的作者没有任何关系。)
推荐阅读
- linux - 无法删除文件中列出的文件夹
- python - 洪水填充功能效果不佳
- opencv - OpenCV中的边界框格式
- javascript - 我应该记住自定义挂钩返回的内容吗
- javascript - 单击删除按钮时如何删除localStorage中的项目
- javascript - 只是好奇这两个代码示例之间是否有任何功能差异?
- node.js - 为什么显示此错误?发送到客户端后无法设置标头
- node.js - 管道后的wkhtmltopdf + nodejs错误(res)
- python - 如何将VS代码工作目录更改为运行文件目录
- http - 对于由服务器生成但不由服务器存储的资源,POST 是正确的 HTTP 动词吗?