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

时间:2014-09-20 02:18:25

标签: python list for-loop

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

我确定我错过了一些明显的东西,我昨天开始在python中编码。

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

EDIT2:完成此项目后,任何对完整脚本链接感兴趣的人都可以找到它here。它在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

1 个答案:

答案 0 :(得分:1)

Python非常适合使用print语句进行调试,特别是对于文本处理。

你需要:

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

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