1

Python-clickの使い方を学ぼうとしています。オプションの 1 つでヘルプ パラメーターを使用できなかったので、最終的にあきらめて、そのオプションのヘルプを含めないようにコードを変更しました。ただし、Python を閉じて再起動し、コンピューターを再起動しても、ヘルプ パラメーターを使用しようとしたことに関連するエラー メッセージがまだ表示されます。

コード:

import click

def something():
    pass

@click.command()
@click.argument('dest_dir',type=click.Path(exists=True, readable=True,
                resolve_path=True, dir_okay=True), 
                help='Location of directory where results will be saved')
@click.option('--use_terms', is_flag=True, 
              help='Process strings based on terms or phrases')
@click.option('--use_query', is_flag=True, help='Process string based on
               search query')
@click.option('--search_phrase', '-s', multiple=True)


def do_process(dest_dir,use_terms,use_query,*search_phrase):
""" testing setting parameters for snip tables"""
    outref = open('e:\\myTemp\\testq.txt')
    ms = dest_dir + '\n'
    if use_terms:
        ms += use_term + '\n'
    else:
        ms += use_query + '\n'
    for each in search_phrase:
        x = something()
        ms += each + '\n'
    outref.writelines(ms)
    outref.close()


if __name__ == "__main__":
    do_process()

もともと私が持っていた最後の @click.option のために

@click.option('--search_phrase', '-s', multiple=True, help='The search phrase to use')

不明なパラメーターのヘルプがあることに関連して、解決できないというエラー メッセージが表示され続けました。私はそれを捨て、上記のものに変更しましたが、今では同様のエラーが発生しています。

その後、Python をシャットダウンし、モジュールを閉じてから、Python を開いて再起動し、コードを再度実行しても、このエラー メッセージが表示されます

トレースバック:

Traceback (most recent call last):
 File "C:\Program Files\PYTHON\snipTables\test_snip_click.py", line 14, in <module>
@click.option('--search_phrase', '-s', multiple=True)
File "C:\Program Files\PYTHON\lib\site-packages\click\decorators.py", line 148, in decorator
_param_memo(f, ArgumentClass(param_decls, **attrs))
 File "C:\Program Files\PYTHON\lib\site-packages\click\core.py", line 1618, in __init__
Parameter.__init__(self, param_decls, required=required, **attrs)
TypeError: __init__() got an unexpected keyword argument 'help'

次に、Python Idle をシャットダウンし、コードを保存して閉じ、Python を再起動し、コードを再度開きましたが、頭を激しく打ち負かした後に切り替えたコード行がトレースバックにあることに注意してください。モニターとあきらめ

再起動の準備をしていますが、原因が本当に気になります。

再起動しましたが、まだ同じエラーが発生します

ファイルの名前を変更して再度実行しても結果は変わらなかった - 同じトレースバック

4

2 に答える 2

5

問題は、クリックが引数パラメーターを持つヘルプ文字列を受け入れないことです。面白い振る舞いです。引数に関連付けられたヘルプ文字列は、引数とオプションを処理する関数内の文字列になります。

エラー メッセージは常に、最後のオプションに関連して表示されます。したがって、この例の正しいコードは次のようになります。

import click

def something():
    pass

@click.command()
@click.argument('dest_dir',type=click.Path(exists=True, readable=True,
                resolve_path=True, dir_okay=True)
##Notice no help string here

@click.option('--use_terms', is_flag=True, 
              help='Process strings based on terms or phrases')
@click.option('--use_query', is_flag=True, help='Process string based on
               search query')
@click.option('--search_phrase', '-s', multiple=True)


def do_process(dest_dir,use_terms,use_query,*search_phrase):
""" testing setting parameters for snip tables"""
    outref = open('e:\\myTemp\\testq.txt')
    ms = dest_dir + '\n'
    if use_terms:
        ms += use_term + '\n'
    else:
        ms += use_query + '\n'
    for each in search_phrase:
        x = something()
        ms += each + '\n'
    outref.writelines(ms)
    outref.close()



if __name__ == "__main__":
    do_process()

これは問題なく実行されますが、私が最初に抱えていた問題は、クリックがエラーの原因をうまく説明していなかったということです。上記では、オプションのヘルプ文字列を削除しましたが、クリック パーサーは、引数からのヘルプ文字列を解析した最後のオプションに関連付けます。

于 2015-08-25T02:15:03.760 に答える
0

ソース ファイルの名前を変更し、以前の名前でコンパイルされた古いバージョンを実行している可能性がありますか?

*.pyc ファイルを削除してみてください

于 2015-08-21T23:32:39.747 に答える