2013-07-19 7 views
1

아마도 간단한 if 문과 문제가 있습니다. 사용하려는 VM 파일 형식 유형을 전달하려고합니다. VMDK 또는 VHD를 넣더라도 VMDK가 잘못된 형식이거나 VHD가 잘못된 형식 인 경우 다시 되돌아옵니다.파이썬 if 문 반환

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 문을 !=으로 시도했지만 괄호 안에 매개 변수를 넣지 않았습니다. 나는 잠시 동안 웹을 수색했고, 내가 발견 한 것을 시험해 보았고, 여전히 같은 문제에 부딪치고있다. 참고로 내가 파이썬 2.6.5을 실행하고

답변

9

시도 : 분명히 잘못된

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

:

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

현재 코드로 분석합니다. ("VMDK")은 truthy 값이므로 전체 문장이 항상 true입니다. 따라서 if 문은 항상 실행됩니다. 당신이

if vmtype is not "VHD": 

그것은 작동하지 않을 것입니다을 시도하는 경우에도


주, is 시험 정체성 때문에, 값이 아닌.

if vmtype != "VHD": 
+0

잘 설명 : – Maroun

+1

기타 버그 : 'is'는 가치 평등 대신 객체 신원을 테스트합니다. 'not in'솔루션도이 문제를 해결해 주지만, 당신이 알아 차렸는지는 확신 할 수 없습니다. – user2357112

+0

@ user2357112 좋은 지적, 나는 그것을 나의 대답으로 편집 할 것이다. – Doorknob