【问题标题】:use statement True and False in Python 2.7在 Python 2.7 中使用语句 True 和 False
【发布时间】:2013-03-18 15:01:37
【问题描述】:

我希望在我的 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):") TrueFalse,我总是得到 ValueError

我也用过这个组合

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

同样的问题

【问题讨论】:

  • 不要使用isis not 与除None 之外的任何内容进行比较。使用==!=。 (好吧,不要使用任何布尔值;只需 if HEADER
  • Wooble,我做到了,但我总是遇到同样的问题
  • (这并没有解决raw_input 问题,这就是我没有将其作为答案发布的原因;这只是关于您的代码中其他问题的一般观点)
  • @Wooble is 对于单身人士来说非常好(甚至鼓励,检查 PEP 8)。 TrueFalse 是单例。我们不使用cond is Truecond is False 的唯一原因是因为if cond: 也同样有效,而且更短、更甜等等。
  • @delnan:嗯,它也几乎永远不会正常工作,因为你可以有一个不是True 的真值和一个不是False 的假值。 (Guido 甚至明确表示永远不要对 TrueFalse 执行此操作,即使您正在检查它是否都是实际的布尔值,因为几乎每次编写它都是一个错误,并且有 1% 的时间你的意思是你应该明确地使用isinstance 来表明你知道你在做什么。)

标签: python if-statement command-prompt


【解决方案1】:

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:

因为它更具可读性。

【讨论】:

  • 感谢您的帮助。我尝试了您的解决方案以更新我的代码语句,但收到一条错误消息。您能否编写(如果您有时间,我不想浪费您的时间)更新我的代码以更好地理解您的解决方案?提前致谢
  • .tolower()?你最近在用什么非 Pythonic 语言编程? ;^)
  • 这是我的错误信息:Traceback(最近一次调用最后一次):文件“”,第 1 行,在 中 AttributeError:'str' 对象没有属性 'tolower'
  • @DSM 非常感谢您修复我的代码。我不知道tolower 来自哪里。我的生活中有太多的编程语言! ;-)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 2023-02-09
    • 2017-03-26
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多