当前位置: 首页 > 知识库问答 >
问题:

系统。argv[1],索引器:列表索引超出范围[重复]

洪浩
2023-03-14

我对Python代码的以下部分有问题:

# Open/Create the output file
with open(sys.argv[1] + '/Concatenated.csv', 'w+') as outfile:

    try:
        with open(sys.argv[1] + '/MatrixHeader.csv') as headerfile:
            for line in headerfile:
                outfile.write(line + '\n')
    except:
        print 'No Header File'

具体错误如下:

Traceback (most recent call last): File "ConcatenateFiles.py", line 12, in <module> with open(sys.argv[1] + 'Concatenated.csv', 'w+') as outfile:
IndexError: list index out of range

我做了一些研究,似乎sys.argv在运行脚本时可能需要命令行中的参数,但是我不确定要添加什么或者问题是什么!我也搜索了这个网站,但是我找到的所有解决方案要么没有评论,要么没有像我一样包含开放功能。

任何帮助都非常感谢。

共有3个答案

濮阳宁
2023-03-14

我做了一些研究,似乎sys.argv在运行脚本时可能需要在命令行进行参数

不可能,但绝对需要。这就是sys的全部要点。argv,它包含命令行参数。与任何python数组一样,访问不存在的元素会引发索引

虽然代码使用try/except来捕获一些错误,但有问题的语句出现在第一行。

因此,脚本需要一个目录名,您可以通过查看len(sys.argv)并与1个需求进行比较来测试是否有目录名。argv始终包含脚本名和任何用户提供的参数,这些参数通常以空格分隔,但用户可以通过引用覆盖空格分隔。如果用户未提供参数,则您的选择是提供默认值、提示用户或打印退出错误消息。

要打印错误并在参数缺失时退出,请在第一次使用sys.argv之前添加一行:

if len(sys.argv)<2:
    print "Fatal: You forgot to include the directory name on the command line."
    print "Usage:  python %s <directoryname>" % sys.argv[0]
    sys.exit(1)

sys。argv[0]始终包含脚本名称,用户输入将放置在后续插槽1、2、。。。

另见:

  • sys.argv[1]在脚本中的意义
  • http://www.pythonforbeginners.com/system/python-sys-argv
申屠昆
2023-03-14

sys。argv是传递给Python脚本的命令行参数列表,其中sys。argv[0]是脚本名称本身。

它跑偏了,因为您没有传递任何命令行参数,因此sys.argv的长度为1,因此sys.argv[1]越界。

要“修复”,只需确保在运行脚本时传递命令行参数,例如。

python ConcatenateFiles.py /the/path/to/the/directory

但是,您可能希望使用一些默认目录,以便在不传入目录时仍然有效:

cur_dir = sys.argv[1] if len(sys.argv) > 1 else '.'

with open(cur_dir + '/Concatenated.csv', 'w+') as outfile:

    try:
        with open(cur_dir + '/MatrixHeader.csv') as headerfile:
            for line in headerfile:
                outfile.write(line + '\n')
    except:
        print 'No Header File'
东方琪
2023-03-14

sys。argv表示用于执行脚本的命令行选项。

sys。argv[0]是正在运行的脚本的名称。所有附加选项都包含在sys中。argv[1::

您正试图打开一个使用sys的文件。argv[1](第一个参数)看起来像是目录。

尝试运行这样的东西:

python ConcatenateFiles.py /tmp
 类似资料:
  • 我想用php发送数据,用python获取数据。但shell_exec无法发送参数。我不明白问题出在哪里。这并不能纠正我的错误 这是我的php文件 刚出现的派克 错误 内容类型:text/html 回溯(最近一次调用last):文件“C:\wamp\www\MLWebsite\website\new.py”,第15行,在x=sys中。argv1索引器错误:列表索引超出范围 请帮我解决这个问题

  • 我得到一个错误: sys.argv[1]命令的索引超出范围。 我认识到sys.argv[0]将给我我的文件的名称,并且在这个if-elif-ther条件循环中,它显然将自己路由到他,这在我当前的应用程序中是不可取的。 我希望数据能打印出来,但事实并非如此。

  • 问题内容: 我在以下Python代码部分遇到问题: 具体的错误如下: 我已经进行了一些研究,似乎在运行脚本时,可能在命令行中需要一个参数,但是我不确定要添加什么或可能是什么问题!我也搜索了该站点,但是我发现的所有解决方案都没有评论,并且/或者没有像我一样包含开放功能。 任何帮助是极大的赞赏。 问题答案: 表示执行脚本所使用的命令行选项。 是您正在运行的脚本的名称。所有其他选项都包含在中。 您正在尝

  • 问题内容: 我在读取CSV文件时遇到此错误(无标题,3列,第二和第三字符串): 这是下面代码的一部分。坚持起来简直是愚蠢的简单事情,但是对于如何工作我只是空白。我是编码的新手,但是之前已经处理过csv模块,并且从来没有遇到过这方面的问题,只是在记事本中制作了一些测试csv文件,以查看是否可以从相同的代码中读取它,并且可以。我不知道。 问题答案: 尝试检查空白行。另外,请避免将其用作变量名。是打开的

  • 我已经使用创建了“CfnUserPool”对象https://docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.aws_cognito/CfnUserPool.html aws文件。 我想获取UserPool的“Pool Id”。其Id值为“us-east-1_4kxxxxxx”。我使用python尝试了很多选项来获取这个值,但都没有成功。 所以我

  • 我试着运行这个: 但是得到这个错误: 回溯(最后一次调用): 文件“C:\Users\Shakh\Desktop\Hello3.py”,第4行,在 打印(“Hallo”,sys.argv[1]) 索引器:列表索引超出范围