我的代码中包含以下部分:
# 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)我就不能了。
我该如何解决?为什么会这样呢?
问题来源:stackoverflow
如果查看异常所打印的堆栈跟踪,应该看到此行引发了异常:
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")
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。