【问题标题】:'IndexError: list index out of range' for a sys.args[1] commandsys.args[1] 命令的“IndexError: list index out of range”
【发布时间】:2019-04-07 17:24:54
【问题描述】:

我收到一个错误:

'IndexError: list index out of range' 用于 sys.argv[1] 命令。

我知道 sys.argv[0] 会给我我的文件的名称,并且在这个 if-elif-else 条件循环中,它清楚地将自己路由到 else,这在我当前的应用程序中是不可取的。

if sys.argv[1] == "train.txt":
    print_data(e2e_train_src, e2e_train_tgt)
elif sys.argv[1] == "valid.txt":
    print_data(e2e_val_src, e2e_val_tgt)
else:
    assert False

我希望数据能够打印出来,但事实并非如此。

【问题讨论】:

  • 在我看来,您的“elif”应该检查 sys.argv[1] 而不是 sys.argv[0],对吗?
  • 您说您知道sys.argv[0] 将是源文件的名称,但在第二种情况下您仍然在检查它。你在测试的时候,有没有通过“valid.txt”?
  • "它清楚地将自己路由到 else" 但是你得到一个索引错误,从这个意义上说它是如何“清晰”的?也许您想先检查sys.argv 的长度? (例如if len(sys.argv) > 1 and sys.argv[1] == ...
  • 如果你得到一个IndexError,那么你的程序调用不会在命令行上指定train.txtvalid.txt。你在输入python myprog.py train.txt吗?

标签: python python-3.x


【解决方案1】:

您可以通过以下方式检查索引:

print("length of arguments: ", len(sys.argv))

这将为您提供参数的数量。

argv[0] 是 python 模块,所以它不能是“valid.txt”

参数的使用:

$python my_module.py "first_argument" "second_argument"

这将有 2 个参数/参数。

【讨论】:

  • 这是无效的语法。
  • 什么无效?
  • print 声明。检查括号。
猜你喜欢
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 2018-02-08
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多