在Python 2.7中使用True和False声明

2 投票
2 回答
2450 浏览
提问于 2025-04-17 19:31

我想在我的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)

但问题依然存在。

2 个回答

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
7

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:

因为这样更容易理解。

撰写回答