for循环字符串比较器将只迭代一次



我是python的新手。这个代码片段获取一个长度为25(devinfoline)的列表,并查找字符串的部分,并将它们分配给dev对象的属性。这看起来很简单。然而,即使列表中有25行,for循环也只会迭代一次。为什么?

我确信我遗漏了一些显而易见的东西,我昨天才开始用python进行编码。

编辑:修复了社区发现的错误,也许这个操作功能对其他人有用。(如果你想知道的话,我的返回dev行在for循环中缩进了,过早地结束了它和函数。这肯定是一个新手错误!)谢谢大家!

第二版:完成了这个项目,任何对完整脚本的链接感兴趣的人都可以在这里找到。它在FreeNAS中发送驱动器温度和SMART测试结果的电子邮件报告。

def SortInfo(device_id):
    dev_info_lines = (a command that returns a list of 25 lines about hard drive SMART info)
    bEnteredInfoSection = False
    i=0
    for line in dev_info_lines:
        i=i+1
        if ( not bEnteredInfoSection ):
            TheFirstField = string.split(line," ",2)
            if ( "information section" in line.lower() ):
                bEnteredInfoSection = True
        else:
            field = string.split(line,":",1)
            if (field[0].lower() == "model family" ):
                dev.family = field[1].strip()
            elif (field[0].lower() == "device model" ):
                dev.model = field[1].strip()
            elif (field[0].lower() == "serial number" ):
                dev.serial = field[1].strip()
            elif (field[0].lower() == "firmware version" ):
                dev.firmware_version = field[1].strip()
            elif (field[0].lower() == "user capacity" ):
                dev.capacity = field[1].strip()
            elif (field[0].lower() == "sector sizes" ):
                dev.sector_sizes = field[1].strip()
            elif (field[0].lower() == "rotation rate" ):
                dev.rotation_rate = field[1].strip()
            elif (field[0].lower() == "device is" ):
                dev.device_is = field[1].strip()
            elif (field[0].lower() == "ata version is" ):
                dev.ata_version = field[1].strip()
            elif (field[0].lower() == "sata version is" ):
                dev.sata_version = field[1].strip()
            elif (field[0].lower() == "smart support is" ):
                temp = string.split(field[1].strip()," ",1)
                strTemp = temp[0].strip().lower()
                if (strTemp == "available" ):
                    dev.smart_support_available = True
                elif (strTemp == "unavailable" ):
                    dev.smart_support_available = False
                elif (strTemp == "enabled" ):
                    dev.smart_support_enabled = True
                elif (strTemp == "disabled" ):
                    dev.smart_support_enabled = False
    return dev

Python对于使用打印语句进行调试非常友好,尤其是对于文本处理。

您需要:

  • 打印dev_info_lines
  • 在循环之前打印len(dev_info_lines)(以确保它是您认为的样子)
  • 在迭代开始时打印行

为什么它不迭代的答案将立即显现出来,您将有下一个具体问题要问我们:)

最新更新