我正在将一个小型代码库从 Python 2 重构到 3(特别是 3.4),我可以使代码库更好、更易于维护的方法之一是解决 Pycharm 显示的所有基于 PEP 的小抱怨。
问题之一是使用可能为空/未初始化的变量。一个例子:
if condition1:
variable1 = parse_something(a_parameter)
elif condition2:
variable1 = parse_something(another_parameter)
local_call(variable1)
正确的做法是在所有用法之前声明变量。因此,我想在声明中注释变量类型。这就是我所做的:
variable1 = None # type: ArgumentParser
if condition1:
variable1 = 5
elif condition2:
variable1 = 10
local_call(variable1)
注释课程类型可以让我进一步了解更多代码完成选项。但是,PEP 扫描抱怨以下内容:Expected type 'ArgumentParser', got 'None' instead
. 这是真的。解决方案似乎是将变量注释为可选,从键入:
from typing import Optional
variable1 = None # type: Optional[ArgumentParser]
if condition1:
variable1 = 5
elif condition2:
variable1 = 10
local_call(variable1)
但是,该软件包似乎并非在软件应该运行的任何地方都可用。而且,再想一想,我问自己:为什么我需要将变量注释为可选?这基本上不是所有变量的标准行为吗?
所以,我的困境是:我不明白为什么我需要一个可选的、可单独安装的包来注释一个变量可以设置为无,但无论如何我认为这是 Python 中所有变量的默认值?我可以通过其他方式解决这个问题吗?
注 1:我知道 Python 3.4 不再受支持。在需要运行软件的系统上,没有其他版本可用,因为平台在 LTS Linux 版本上运行。