所以我正在使用python中的命令行程序,我的一个命令是“help”,它会按照您的预期打印各种命令的信息。但是,当我使用input()方法输入“help”,然后拆分它时,我收到此错误
Traceback (most recent call last):
File ..., line 385, in <module>
cmd(userinput)
File ..., line 292, in cmd
parts = line.split(' ', 1)
AttributeError: '_Helper' object has no attribute 'split'
当我打印出用户刚刚输入的内容时
Type help() for interactive help, or help(object) for help about object.
为什么python在我的程序中执行shell帮助?
供参考,代码的相关位是
def cmd(line):
print line
parts = line.split(' ', 1)
cmd(input(">"))
答案 0 :(得分:4)
因为这是2.x中的input()
:它会尝试评估输入的字符串。请改用raw_input()
。
答案 1 :(得分:2)
不要使用input
函数(在Python 2.x中)永远,使用raw_input
并解析返回的字符串。 input
将评估用户输入的字符串(与eval(raw_input('>'))
相同),并且有一个名为“help”的全局字符,将对其进行评估。这样你看到的行为。
Python 3只有input
,其行为类似于raw_input
(不是eval),所以在Python 3上你应该使用input
。
答案 2 :(得分:0)
这里有两件事:
input
评估输入并返回结果。由于help
是内置python函数,因此python返回help
函数。help
函数实际上是site._Helper
的一个实例。 site._Helper_
会覆盖对象上的默认__repr__
。现在,当打印将help
转换为字符串时,将调用object.__str__
,它将转身并调用_Helper.__repr__
,这将打印帮助消息。这就是你打印时看到python帮助信息的原因。当然,您应该使用raw_input
代替input
。