python - 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) 我不能。
我该如何解决这个问题?为什么会这样?
解决方案
如果您查看异常打印的堆栈跟踪,您应该会看到此行引发了异常:
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")
推荐阅读
- bluetooth - 低功耗蓝牙配对与非配对通信
- javascript - 如何找到所有带值的输入
- php - 我可以在 Magento 1.X 中开发与支付提供商的集成吗?
- docker - 较新版本的 Docker 在构建期间会出现权限错误
- amazon-web-services - AWS::ApiGateway::Stage 需要 DeploymentId ...但我在哪里可以找到这个?
- world-of-warcraft - 如何重置任务或区域
- c++ - 我的代码停在中间并且没有错误 c++
- python - 构建熊猫数据框
- python - 在套接字中使用 json.loads() 时不能使用任何时间函数:
- protocol-buffers - 如何使用 protobuf 二进制文件过滤 PUB/SUB?