首页 > 解决方案 > Python - 当变量分配给 sys.argv 时尝试/除了不工作

问题描述

我的代码中有这一部分:

# I/O files 
inp_arq = sys.argv[1]
out_arq = sys.argv[2]
pad_ref = "pad_ref03.fasta"
tes_mdl = "model_05_weights.best.hdf5"

最后:

try:
    results_df.to_csv(out_arq,index = False)
    print(f"File saved as: {out_arq}")
except IndexError:
    print("No output file created")

如果没有文件作为 out_arq (sys.argv[2]) 传入,它应该运行脚本并在最后打印“未创建输出文件”。但我得到“IndexError:列表索引超出范围”。

但是,如果我注释掉“out_arq = sys.argv[2]”这一行并将代码更改为:

try:
    results_df.to_csv(sys.argv[2],index = False)
    print(f"File saved as: {sys.argv[2]}")
except IndexError:
    print("No output file created")

它有效,我收到了消息,但我不知道为什么。我想在脚本开始时拥有我所有的 I/O 文件/变量,但是对于这个 (out_arq) 我不能。

我该如何解决这个问题?为什么会这样?

标签: pythonpython-3.xdata-science

解决方案


如果您查看异常打印的堆栈跟踪,您应该会看到此行引发了异常:

out_arq = sys.argv[2]

这在try块之外,因此不会捕获异常,并导致您的程序终止。

一种解决方案是在索引数组之前检查元素是否存在:

out_arq = sys.argv[2] if len(sys.argv) >= 3 else None

然后使用if代替try

if out_arq:
    results_df.to_csv(out_arq,index = False)
    print(f"File saved as: {out_arq}")
else:
    print("No output file created")

推荐阅读