开发者社区> 问答> 正文

Python-将变量分配给sys.argv时,try / except不起作用

我的代码中包含以下部分:

# 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

展开
收起
is大龙 2020-03-21 12:52:15 587 0
1 条回答
写回答
取消 提交回答
  • 如果查看异常所打印的堆栈跟踪,应该看到此行引发了异常:

    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

    2020-03-21 12:52:42
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载