Python函数中的局部变量问题

时间:2019-07-15 08:15:15

标签: python-3.x

我正在尝试在Python 3.6中编写一个函数,以获取LVM的列表,它们的卷组和Linux计算机中的大小。 这是我写的代码

def get_attribute():
command = subprocess.Popen("lvs --rows", shell=True, stdout=subprocess.PIPE)
for line in command.stdout:
    line_cod = line.decode("utf-8")
    if "LV" in line_cod:
        lvm_list = (line_cod.split()[1:])
    elif "VG" in line_cod:
        vg_list = line_cod.split()[1:]
    elif "LSize"in line_cod:
        size_list = line_cod.split()[1:]
        lvdata = zip(lvm_list, vg_list, size_list)
        return lvdata

这将返回一个可迭代的循环,我可以循环使用一个具有LVM名称,VolumeGroup和Size的元组。 尽管这很好用,但是在zip之后的Pycharm上,我对lvm_listvg_list变量:local variable "lvm_list/vg_list might be referenced before assignment发出了警告。 在网络上搜索时,我知道此错误与变量范围有关,但我知道if语句未在Python中定义范围。 我在做什么错了?

1 个答案:

答案 0 :(得分:-1)

当且仅当始终有两行,其中一行包含import com.company.pipeline.providers.BuildLogProvider class PublishBuildLog { BuildLogProvider buildLogProvider = new BuildLogProvider() void setBuildLogProvider(BuildLogProvider buildLogProvider) { this.buildLogProvider = buildLogProvider } def call(def jobName, def buildNumber) { def contents = buildLogProvider.getBuildLog(jobName, buildNumber) writeFile(file: "filename", text: contents) } } 数据,另一行包含LV数据,而行VG之前,您的解决方案才有效。可能是这种情况,但是linter不知道这件事,它看到的只是LSize构造中的情况导致读取两个变量iflvm_list在分配它们之前。

如果您确定vg_list行总是排在其他两行之后,则可以在循环之前使用任何值初始化变量,并且linter会停止抱怨:

LSize