作为大型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中的错误吗?我很困惑。
提前致谢。
答案 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
。不是你想要的,是吗?