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