2013-07-19 171 views
1

我在推测是简单的if语句时遇到了问题。我试图通过使用的虚拟机文件格式的类型。即使我放置了VMDK或VHD,它仍会返回,VMDK是无效类型,或者VHD是无效类型。Python如果返回语句

import sys 
vmtype = sys.argv[3] 
vmtype = str(vmtype).strip().upper() 
## File format check 
if vmtype is not ("VHD") or ("VMDK"): 
    print vmtype + " is an invalid type" 
    sys.exit() 

我试过if语句!=而不是将参数放在括号中。我在网上搜索了一段时间,并尝试了我发现的并且仍然遇到同样的问题。

FYI我正在运行的Python 2.6.5

回答

9

尝试:

if vmtype not in ("VHD", "VMDK"): 

您当前的代码分析如下:

if (vmtype is not ("VHD")) or ("VMDK"): 

这显然是错误的。由于("VMDK")是一个真值,整个陈述总是如此。因此,if语句将始终执行。


注意,即使你试图

if vmtype is not "VHD": 

这是行不通的,因为is测试的身份,而不是价值。你可以使用:

if vmtype != "VHD": 
+0

很好的解释:) – Maroun

+1

其他错误:'is'测试对象的身份,而不是价值相等。 “不在”解决方案恰好也解决了这个问题,但我不确定你是否注意到了。 – user2357112

+0

@ user2357112好点,我会将其编辑到我的答案中。 – Doorknob