Python if / else循环不起作用

时间:2013-08-08 14:33:27

标签: python

我有一个csv文件所在的目录。代码读取文件并根据文件中的数据创建直方图。

但是,我试图让它在命令行中输入csv文件中的一个列标题,代码只会生成指定命令的图形。示例:python histogram_maker.py“C:/ Folder”Area。

我能够做到这一点,但我想添加一个会在用户输入未在csv文件中指定的命令时创建错误消息的部分。示例:周边不存在。我的代码出了什么问题?即使存在某些东西,我在命令提示符下也会“不存在”20次,但它仍然会生成我需要的所有文件。如何阻止这种重复并使其成为只有在csv文件中没有内容时才会出现错误。

        for column in df:
            os.chdir(directory)
            if len(sys.argv)>2:
                for x in arguments:
                    if x.endswith(column):
                       #code for histogram
                    else: 
                        print "does not exist"

2 个答案:

答案 0 :(得分:6)

您正在测试所有参数,即使只有一个匹配。对于不匹配的每个参数,您将打印错误消息。

使用any()功能查看是否有匹配项:

if len(sys.argv)>2:
    if any(x.endswith(column) for x in arguments):
        #code for histogram
    else: 
        print "does not exist"

或反转测试;使用not并提前纾困:

if len(sys.argv)>2:
    if not any(x.endswith(column) for x in arguments):
        print "does not exist"
        sys.exit(1)

    #code for histogram

如果带有生成器表达式的any()有点太难以理解,您仍然可以使用for循环,但是您需要使用break提前结束循环并且else:套件将在for循环提前退出时执行:

for x in arguments:
    if x.endswidth(column):
        break  # found a match
else:
    # `for` loop was not exited, so no match found
    print "does not exist"
    sys.exit(1)

答案 1 :(得分:0)

也许你想要这样的东西......

    for column in df:
        os.chdir(directory)
        if len(sys.argv)>2:
            found = False
            for x in arguments:
                if x.endswith(column):
                   found = True
                   #code for histogram
                   break
            if (found == False):
                print "does not exist"