在Python 2.7中使用True和False语句

在Python 2.7中使用True和False语句,python,if-statement,command-prompt,Python,If Statement,Command Prompt,我希望在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_inp

我希望在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\u输入(“Header(True/False):”
True
False
,我总是会得到
ValueError

我也用了这个组合

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

同样的问题

标题
是一个字符串,而不是布尔值。这将导致
is
检查失败。您的比较结果如下:

>>> "True" is not True
True
>>> "True" is not False
True
if HEADER.lower() == 'true':
请注意,与
=
的比较也将失败:

>>> "True" == True
False
>>> "True" == False
False
尝试将值作为字符串进行比较:

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

原始输入的返回值是字符串而不是布尔值。因此,您的
不是真的
不是假的
测试,尽管它们有明确的含义,但该含义不是您想要的含义。您需要将
标题
与字符串值进行比较

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

>>> "True" is not True
True
>>> "True" is not False
True
if HEADER.lower() == 'true':
我使用
tolower()
实现不区分大小写的比较。您可能还希望去除空白:

if HEADER.strip().lower() == 'true':
我相信你可以自己填写
false
测试


即使您有一个布尔值,也不应该使用像
为非真
为假
这样的代码。你应该用以下方法来检验真理:

if somebool:


因为它更具可读性。

不要使用
is
is not
与除
之外的任何内容进行比较。使用
==
=。(好吧,不要对布尔型使用任何东西;只要
if HEADER
Wooble,我就这么做了,但我总是遇到同样的问题(这并没有解决
原始输入的问题,这就是为什么我没有将其作为答案发布的原因;这只是关于代码中其他错误的一般观点)@Wooble
很好(鼓励偶数,检查政治公众人物8)对于单例。
True
False
都是单例。我们不使用
cond的唯一原因是True
cond是False
是因为
if-cond:
同样有效,而且更短、更甜,等等。@delnan:嗯,它也几乎永远不会正确工作,因为你可以有一个不是
Tr>的真实值ue
和非
False
的伪值。(Guido甚至明确表示,永远不要对
True
False
执行此操作,即使您正在检查它是否都是实际的布尔值,因为几乎每次编写它时都是一个bug,并且在您表示它的1%时间内,您应该显式使用
isinstance
,以表明您知道自己在做什么。)谢谢你的帮助。我尝试了你的解决方案来更新我的代码语句,但是我收到了一条错误消息。你能为我的代码写一个更新(如果你有时间,我不想浪费你的时间)以便更好地理解你的解决方案吗?提前谢谢
.tolower()
?你最近在用什么非Python语言编程?;^)这是我的错误消息:Traceback(最近一次调用last):AttributeError中的文件“”,第1行:“str”对象没有属性“tolower”@DSM非常感谢您修复我的代码。我不知道tolower
从何而来。我生活中的编程语言太多了!;-)