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

为什么python试图在我的程序中打开它的帮助?,python,input,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

因此,我正在用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'
python究竟为什么在我的程序中执行它的shell帮助

作为参考,相关的代码位如下

def cmd(line):
    print line
    parts = line.split(' ', 1)

 cmd(input(">"))

因为这就是2.x中的
input()
所做的:它尝试计算输入的字符串。改用
raw\u input()

因为2.x中的
input()
就是这样做的:它尝试计算输入的字符串。使用
raw\u input()

永远不要使用
input
函数(在Python 2.x中),使用
raw\u input
并解析返回的字符串
input
将计算用户输入的字符串(与
eval(原始输入('>'))
)相同),并且有一个名为“help”的全局值,将对其进行计算。因此,你看到的行为


Python3只有
input
,它的行为类似于
raw\u input
(不求值),因此在Python3上,您应该使用
input

不要使用
input
函数(在Python2.x中),使用
raw\u input
并解析返回的字符串
input
将计算用户输入的字符串(与
eval(原始输入('>'))
)相同),并且有一个名为“help”的全局值,将对其进行计算。因此,你看到的行为


Python3只有
input
,它的行为类似于
raw\u input
(不求值),因此在Python3上,您应该使用
input
,这里有两件事:

  • 正如其他人指出的那样,Python2.x上的
    input
    对输入求值并返回结果。由于
    help
    是一个内置的python函数,python将返回
    help
    函数
  • help
    函数实际上是
    站点的一个实例<代码>站点。_Helper
    覆盖对象上的默认值。现在,当print将
    帮助
    转换为字符串时,将调用
    对象.\uuu str\uuu
    ,它将返回并调用
    \u Helper.\uu repr\uuu
    ,它将打印帮助表。这就是为什么在打印python帮助消息时会看到它

  • 当然,您应该使用
    raw\u input
    而不是
    input

    这里有两件事:

  • 正如其他人指出的那样,Python2.x上的
    input
    对输入求值并返回结果。由于
    help
    是一个内置的python函数,python将返回
    help
    函数
  • help
    函数实际上是
    站点的一个实例<代码>站点。_Helper
    覆盖对象上的默认值。现在,当print将
    帮助
    转换为字符串时,将调用
    对象.\uuu str\uuu
    ,它将返回并调用
    \u Helper.\uu repr\uuu
    ,它将打印帮助表。这就是为什么在打印python帮助消息时会看到它
  • 当然,您应该使用
    原始输入
    而不是
    输入

    def cmd(line):
        print line
        parts = line.split(' ', 1)
    
     cmd(input(">"))