我一直在尝试为将在命令行上运行的脚本编写一个优雅的[y/n]提示符。我遇到了这个:
http://mattoc.com/python-yes-no-prompt-cli.html
这是我编写的用于测试它的程序(实际上只是在我使用Python3时涉及将raw_input更改为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 import strtobool”更改为“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
我该如何解决这个问题?
最佳答案
第一条错误消息: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
是“从键盘获取字符串”,但是Python 2中的input
是“从键盘获取字符串并eval
它”。假设您不想使用eval
输入,请改为在Python 2上使用raw_input
。
关于python - 使用strtobool在Python3中是/否提示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42248342/