2013-03-18 45 views
1

我希望用一個聲明「True」和「False」爲我的Python(2.7)命令提示符使用聲明真假的Python 2.7

segmentation_accuracy(reference=REFERENCE, segmented=SEGMENTED, output=OUTPUT, method=METHOD, threshold=THRESHOLD, sep=SEP, header=HEADER) 

如果標題是True打印帶有標題的文本文件,如果標題爲False則打印一個沒有標題的文本文件。

在命令提示符

REFERENCE = raw_input("Reference (*.shp):") 
SEGMENTED = raw_input("Segmented (*.shp):") 
METHOD = raw_input("Method (ke, pu, clinton):") 
if METHOD != "ke" and METHOD != "pu" and METHOD != "clinton": 
    raise ValueError("%s is not a valid method" % METHOD) 
if METHOD == "ke" or METHOD == "clinton": 
    THRESHOLD = input("Threshold (0.0 - 1.0):") 
    if not check_threshold(THRESHOLD): 
     raise AccuracyException("Threshold of %s is not valid" % THRESHOLD) 
else: 
    THRESHOLD = None 
SEP = raw_input("Sep:") 
HEADER = raw_input("Header (True/False):") 
if HEADER is not True or HEADER is not False: 
    raise ValueError("%s is not valid" % HEADER) 
# output 
OUTPUT = raw_input("Output (*.txt):") 

當我在Windows中運行命令提示符下,如果我設置raw_input("Header (True/False):")TrueFalse,我總是得到ValueError

我還使用了組合

if HEADER != True or HEADER != False: 
     raise ValueError("%s is not valid" % HEADER) 

與同樣的問題

+0

不要使用'is'和'不是'與除None之外的任何東西進行比較。使用'=='或'!='。(那麼,不要使用任何布爾值;只是'如果HEADER' – geoffspear 2013-03-18 15:03:07

+0

Wooble,我做了,但我總是有同樣的問題 – 2013-03-18 15:04:16

+0

(這不解決'raw_input'問題,這就是爲什麼我沒有發佈它作爲回答;這只是關於你的代碼中的其他錯誤的一般觀點) – geoffspear 2013-03-18 15:04:55

回答

6

raw_input的返回值是一個字符串而不是布爾值。因此,您的is not Trueis not False測試雖然具有明確的含義,但意思並非您打算的含義。您需要將HEADER與字符串值進行比較。

所以你需要,例如,像這樣的代碼:

if HEADER.lower() == 'true': 

我以前tolower()實現區分大小寫的比較。您可能還需要去掉空格:

if HEADER.strip().lower() == 'true': 

我敢肯定,你可以在測試中對填寫自己false


即使你確實有一個布爾值,你不應該使用這樣的代碼is not Trueis False。您應該測試的道理:

if somebool: 

if not somebool: 

,因爲它是更具可讀性。

+0

感謝您的幫助。我嘗試了您的解決方案以更新我的代碼語句,但我收到了一條錯誤消息。你能寫(如果你有時間,我不想濫用你的時間)更新我的代碼,以更好地理解你的解決方案嗎?在此先感謝 – 2013-03-18 15:14:24

+2

'.tolower()'?你最近編寫了什麼非Pythonic語言? ; ^) – DSM 2013-03-18 15:17:55

+0

這是我的錯誤信息: 回溯(最近通話最後一個): 文件 「<編輯選擇>」,1號線,在 AttributeError的: '海峽' 對象有沒有屬性 'tolower的' – 2013-03-18 15:18:00

0

HEADER是一個字符串,而不是布爾值。這將導致is檢查失敗。你比較運行是這樣的:

>>> "True" is not True 
True 
>>> "True" is not False 
True 

注意與==的比較也將失敗:

>>> "True" == True 
False 
>>> "True" == False 
False 

嘗試比較值的字符串:

if HEADER.tolower() == 'true': 
    #do something 
elif HEADER.tolower() == 'false: 
    #do something else