为什么python试图在我的程序中打开它的帮助?

时间:2013-12-06 02:50:57

标签: python input

所以我正在使用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(">"))

3 个答案:

答案 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)

这里有两件事:

  1. 正如其他人所指出的,Python {x> em上的input评估输入并返回结果。由于help是内置python函数,因此python返回help函数。
  2. help函数实际上是site._Helper的一个实例。 site._Helper_会覆盖对象上的默认__repr__。现在,当打印将help转换为字符串时,将调用object.__str__,它将转身并调用_Helper.__repr__,这将打印帮助消息。这就是你打印时看到python帮助信息的原因。
  3. 当然,您应该使用raw_input代替input