Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-try/except将变量分配给sys.argv时不工作_Python_Python 3.x_Data Science - Fatal编程技术网

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

Python-try/except将变量分配给sys.argv时不工作,python,python-3.x,data-science,Python,Python 3.x,Data Science,我的代码中有此部分: # 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:

我的代码中有此部分:

# 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])传入,它应该运行脚本并在最后打印“没有创建输出文件”。但我得到了“索引器:列表索引超出范围。”

但是如果我注释掉“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文件/VAR都在脚本的末尾,但是有了这个(out_arq),我不能


我怎样才能解决这个问题?为什么会发生这种情况?

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

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")

或者,只需将可能导致错误的语句移动到
try
块中即可。当然可以@Barmar,但就代码组织而言,我更喜欢Thomas answer。无论如何,谢谢你。