zl程序教程

您现在的位置是:首页 >  Java

当前栏目

解决SystemExit: 2,args = parser.parse_args() 的问题,

2023-02-18 16:37:09 时间

报错:

 File "/home/barry/PycharmProjects/EEPC/detect.py", line 283, in parse_opt
    opt = parser.parse_args()
  File "/home/barry/anaconda3/envs/EEPC/lib/python3.9/argparse.py", line 1823, in parse_args
    self.error(msg % ' '.join(argv))
  File "/home/barry/anaconda3/envs/EEPC/lib/python3.9/argparse.py", line 2577, in error
    self.exit(2, _('%(prog)s: error: %(message)s\n') % args)
  File "/home/barry/anaconda3/envs/EEPC/lib/python3.9/argparse.py", line 2564, in exit
    _sys.exit(status)
SystemExit: 2

原因:

报错原因: argparse 是一个旨在解析从命令行传递的参数的模块,您可以使用 argparse 来编译 参数内容。如果 argparse 认为参数无效,则退出,这通常在 python 中通过调用 sys.exit() 来完成,这会引发 SystemExit 错误,这就是您所看到的。 所以问题是你试图从交互式解释器(看起来像 ipython)中使用 argparse,此时程序已经启动,所以应该已经解析了 args。

解决方法一:

args = parser.parse_args()
改成
args = parser.parse_args(args=[])

原因分析:

args = parser.parse_args()
2.parse_args(args=["-n3","-b2"])#表示给n参数赋值为3,b参数赋值为2。其他参数默认。
parse_args(args=[])#表示所有参数使用默认。

而我们的报错情况是形式1,一旦执行parse_args()语句,python系统就会执行读取参数的操作(我们看不到),此时jupyter notebook系统默认会给一个奇怪的参数:

因此:

将parse_args()由形式1换成形式2。

最后一行换成:

import argparse


parser = argparse.ArgumentParser(description="Deep Gaussian Processes on MNIST")
parser.add_argument("-n", "--num-epochs", default=5, type=int)
parser.add_argument("-t", "--num-iters", default=60, type=int)
parser.add_argument("-b", "--batch-size", default=1000, type=int)
parser.add_argument("-lr", "--learning-rate", default=0.01, type=float)


args = parser.parse_args(args=[])

解决方案二:

删除参数required=True,如果还不行的话按照再按照方法一方法添加

parser.add_argument("--model_path", type=str, required=True, default='/mnt/data_1/', help="The path to model parameters to be loaded.")


parser.add_argument("--model_path", type=str, default='/mnt/data_1/', help="The path to model parameters to be loaded.")
args = parser.parse_args(args=[])

解决方案三:

开头添加:

参考链接:

python - SystemExit: 2 error when calling parse_args() within ipython - Stack Overflow

import sys
sys.argv=['']
del sys

解决方法四:

添加一个接受上面那个参数的语句。

parser.add_argument('-f', type=str, default="读取额外的参数")
import argparse


parser = argparse.ArgumentParser(description="Deep Gaussian Processes on MNIST")
parser.add_argument("-n", "--num-epochs", default=5, type=int)
parser.add_argument("-t", "--num-iters", default=60, type=int)
parser.add_argument("-b", "--batch-size", default=1000, type=int)
parser.add_argument("-lr", "--learning-rate", default=0.01, type=float)


parser.add_argument("-f","--file",default="file")#接收这个-f参数
args = parser.parse_args()
print(args.file)