2

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):")

raw_input("Header (True/False):") Trueまたはを設定して Windows でコマンド プロンプトを実行すると、False常にValueError

私もその組み合わせを使用しました

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

同じ問題で

4

2 に答える 2

7

からの戻り値raw_inputは文字列であり、ブール値ではありません。したがって、is not Trueandis not Falseテストは明確に定義された意味を持っていますが、その意味は意図した意味ではありません。HEADER文字列値と比較する必要があります。

したがって、たとえば次のようなコードが必要になります。

if HEADER.lower() == 'true':

以前tolower()は大文字と小文字を区別しない比較を行っていました。空白を取り除くこともできます:

if HEADER.strip().lower() == 'true':

自分自身に対するテストに記入できると確信していfalseます。


is not Trueブール値があったとしても、やのようなコードは使用しないでくださいis False。次の方法で真実をテストする必要があります。

if somebool:

また

if not somebool:

はるかに読みやすいからです。

于 2013-03-18T15:04:09.247 に答える
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
于 2013-03-18T15:03:47.850 に答える