2

我希望为我的 Python (2.7) 命令提示符使用语句“ True”和“ ”False

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

如果 header 是True打印一个带有标题的文本文件,如果 header 是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)

有同样的问题

4

2 回答 2

7

from 的返回值raw_input是字符串而不是布尔值。因此,尽管您的is not Trueis not False测试具有明确定义的含义,但该含义并不是您想要的含义。您需要HEADER与字符串值进行比较。

因此,例如,您需要这样的代码:

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

我曾经tolower()进行不区分大小写的比较。您可能还想去除空白:

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

我相信你可以填写针对false自己的测试。


即使你确实有一个布尔值,你也不应该使用类似is not Trueor的代码is False。您应该通过以下方式测试真相:

if somebool:

或者

if not somebool:

因为它更具可读性。

于 2013-03-18T15:04:09.247 回答
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
于 2013-03-18T15:03:47.850 回答