【问题标题】:Python shell showing error but cmd is running that programPython shell 显示错误但 cmd 正在运行该程序
【发布时间】:2024-11-16 10:45:01
【问题描述】:

我是 python 新手。我正在使用输入参数在 cmd 中添加两个数字。我在 cmd 上得到输出,但在 python shell 上出现错误。我正在使用 windows 7 和 python shell 3.3.2。所以任何人都可以告诉我为什么我的代码没有在 python shell 上运行?

代码:

import sys
n=int(sys.argv[1])
m=int(sys.argv[2])
print(n+m)

错误:

Traceback(最近一次通话最后一次):

文件“C:/pythonprogram/add.py”,第 4 行,在

n=int(sys.argv[1])

IndexError: 列表索引超出范围

【问题讨论】:

  • 您是否使用正确数量的参数运行您的程序?请展示您如何在 shell 中运行脚本
  • 当我运行上面的代码时,它显示错误。 python shell 需要像 cmd 这样的参数吗?

标签: python python-3.x


【解决方案1】:

您的程序需要两个命令行参数sys.argv 是命令行参数的列表。错误 IndexError: list index out of range 告诉您您尝试获取列表项编号 2(索引为 1),但列表没有那么多值。

您可以在 shell 中重现该错误:

>> alist = ['Item 0']
>> print(alist[1])

由于 alist 只有索引为 0 的项目,因此请求具有更高索引的项目将导致该错误。

现在,您的确切问题。该程序告诉您它预期的命令行参数,但没有提供它们。提供他们! 运行这个命令:

python add.py 1 2

这将执行脚本并将1 作为第一个参数,2 作为第二个参数。 在您的情况下,一般格式是

python add.py [n] [m]

现在你可能(你应该)想知道sys.argv[0] 是什么,为什么你的n 号码没有分配给sys.argv[1]sys.argv[0] 是正在运行的脚本的名称。

进一步阅读命令行参数:

http://www.pythonforbeginners.com/system/python-sys-argv

附加。 您可以将脚本修改为更具描述性:

import sys
if len(sys.argv) < 3: #script name + 2 other arguments required
 print("Provide at least two numbers")
else:
 n=int(sys.argv[1])
 m=int(sys.argv[2])
 print(n+m)

【讨论】:

    【解决方案2】:

    sys.argv 包含命令行参数。当您在 Python shell 中运行脚本时,您很可能不会发送任何参数。我建议添加一个检查是否存在这样的命令行参数:

    import sys
    
    if len(sys.argv) > 2:
        n=int(sys.argv[1])
        m=int(sys.argv[2])  
        print(n+m)
    

    查看this 以了解有关 Python 的更多信息和sys.argv

    【讨论】:

    • 究竟是什么问题出在哪里?
    • sys.argv 始终包含至少一个元素。在这种情况下,您必须检查至少 3 项。
    • @Euphe 对,已修复
    • 如果您使用的是IDLE,那么不,不可能提供命令行参数。
    • 无论如何要在 python shell 上运行它?