2017-02-15 2 views
1

私はコマンドラインで実行するスクリプトのための優雅な[y/n]プロンプトを書くことを試みてきました。私はこれに出くわした:はい/いいえPython3でstrtoboolを使ってプロンプト

http://mattoc.com/python-yes-no-prompt-cli.html

これは私が(私はのpython3を使用しているとして、それは本当にただの入力にraw_input変更関与)、それをテストするために書いたプログラムです:

import sys 
from distutils import strtobool 

def prompt(query): 
    sys.stdout.write("%s [y/n]: " % query) 
    val = input() 
    try: 
     ret = strtobool(val) 
    except ValueError: 
     sys.stdout.write("Please answer with y/n") 
     return prompt(query) 
    return ret 

while True: 
    if prompt("Would you like to close the program?") == True: 
     break 
    else: 
     continue 

しかし、私は、私は次のエラーを取得するコードを実行しようとするたびに:変更

ImportError: cannot import name strtobool 

「輸入distutilsの」へ「のdistutilsからはstrtoboolをインポート」NameErrorのiと、助けにはなりません募集:

Would you like to close the program? [y/n]: y 
Traceback (most recent call last): 
    File "yes_no.py", line 15, in <module> 
    if prompt("Would you like to close the program?") == True: 
    File "yes_no.py", line 6, in prompt 
    val = input() 
    File "<string>", line 1, in <module> 
NameError: name 'y' is not defined 

この問題を解決するにはどうすればよいですか?

+0

Afaik、私はこのウェブサイトを2.xで書いていますが、私は3.xでそれを複製しようとしています。 –

答えて

1

最初のエラーメッセージ:

ImportError: cannot import name strtobool

には公に目に見えるstrtobool機能を使用して、インポートしたdistutilsモジュールにありませんことを語っています。

これはpython3で移動したためです:from distutils.util import strtoboolを代わりに使用しています。

https://docs.python.org/3/distutils/apiref.html#distutils.util.strtobool


2番目のエラーメッセージが深く私を混乱させる - yあなたの入力は(コードのように変換されるしようとしていることを意味しているようですので、それがどの程度知っていないと文句を言いy変数。私はそれがどうして起こるのかよく分かりません!

+1

Works完全に今!私は 'distutilsをインポートしようとしましたが、distutils.util.strtoboolを関数に使用しようとしましたそれも正しいアプローチではありませんでした。 2番目のエラーはまだ私にとって謎です。私はstrtoboolをどのようにインポートしようとしているのかもしれませんが、プログラムはまだプロンプト関数を実行しようとしている間、関数はありませんか? –

+1

本当にそうすべきではありません。 'eval(...)'やそれに類するものがあなたのコードのどこかになければ、あなたのデータは実行されるべきではありません。 (実行されるデータは、しばしば大きなセキュリティ問題です...) – Dragon

関連する問題