我希望在我的Python(2.7)命令提示符下使用语句“True
”和“False
”
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):")
True
或False
,我总是得到ValueError
我也使用了组合
if HEADER != True or HEADER != False:
raise ValueError("%s is not valid" % HEADER)
遇到同样的问题
答案 0 :(得分:6)
raw_input
的返回值是一个字符串而不是布尔值。因此,您的is not True
和is not False
测试虽然具有明确的含义,但意义并不是您想要的含义。您需要将HEADER
与字符串值进行比较。
所以你需要这样的代码:
if HEADER.lower() == 'true':
我使用tolower()
来进行不区分大小写的比较。您可能还想剥离空白区域:
if HEADER.strip().lower() == 'true':
我确信你可以自己填写false
的测试。
即使您有布尔值,也不应使用is not True
或is False
之类的代码。你应该用以下方法测试真相:
if somebool:
或
if not somebool:
因为它更具可读性。
答案 1 :(得分: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