我正在将一个小的代码库从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)
但是,该软件包似乎并非在应运行该软件的任何地方都可用。而且,再三考虑,我问自己:为什么我需要将变量注释为Optional?这基本上不是所有变量的标准行为吗?
所以,我的困境是:我不明白为什么我需要一个可选的,可单独安装的软件包来注释一个变量可以设置为None的原因,无论如何我还是认为这是Python中所有变量的默认值?我能以其他方式解决吗?
注1:我知道不再支持Python 3.4。在需要运行该软件的系统上,没有可用的其他版本,因为这些平台都在LTS Linux版本上运行。