令人困惑的python问题

时间:2010-08-23 15:48:27

标签: python

作为大型python程序的一部分,我有以下代码:

for arg in sys.argv:
    if "name=" in arg:
            name = arg[5:]
            print(name)
    elif "uname=" in arg:
            uname = arg[6:]
            print(uname)
    elif "password=" in arg:
            password = arg[9:]
            print(password)
    elif "bday=" in arg:
            bday = arg[5:]
            print(bday)
    else:
            pass

该计划需要以下内容:

python prog.py "name=Kevin" "uname=kevin" "password=something" "bday=01/01/01"

当我稍后尝试使用“uname”时,程序失败,声称“uname未定义” 我添加了“print()”行来尝试和调试,“print(uname)”总是显示“= kevin”而不管我放在那里的索引号(这里是“6:”)。其他声明似乎工作正常。这是python中的错误吗?我很困惑。

提前致谢。

2 个答案:

答案 0 :(得分:11)

elif“uname =”永远不会运行,因为字符串“name =”在“uname =”中。基本上,你要覆盖你的名字变量。

>>> "name=" in "uname="
True

您可以重新排序ifs,以便在名称之前发生uname。

答案 1 :(得分:4)

让我们仔细看看。

if "name=" in arg:
        name = arg[5:]
        print(name)
elif "uname=" in arg:
        uname = arg[6:]
        print(uname)

当我将此应用于“name = Kevin”时,哪条规则有效?只是第一个,对吧?

当我将此应用于“uname = kevin”时,哪条规则有效?第一?第二个?都?有趣的是,第一个有效。我在name=kevin内看到uname=kevin。不是你想要的,是吗?