使用strtobool在Python3中是/否提示

时间:2017-02-15 11:39:39

标签: python python-3.x

我一直试图为我将通过命令行运行的脚本编写一个优雅的[y / n]提示符。我偶然发现了这个:

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

这是我编写的用于测试它的程序(它实际上只涉及将raw_input更改为输入,因为我使用Python3):

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 import strtobool" to" import distutils"没有帮助,因为引发了NameError:

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:9)

第一条错误消息:

ImportError: cannot import name strtobool

告诉您,您导入的strtobool模块中没有公开显示的distutils功能。

这是因为它已在python3中移动:改为使用from distutils.util import strtobool

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

第二条错误消息让我深感困惑 - 似乎暗示您输入的y试图被解释为代码(因此抱怨它不知道任何y变量。我不太清楚这是怎么发生的!

......两年过去了......

啊,我现在明白了......在Python 3中input是&#34;从键盘获取字符串&#34;,但是Python 2中的input是&#34; get来自键盘的字符串,eval它&#34;。假设您不想eval输入,请改用Python 2上的raw_input