报错:
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 argparseparser = 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 syssys.argv=['']del sys
解决方法四:
添加一个接受上面那个参数的语句。
parser.add_argument('-f', type=str, default="读取额外的参数")
import argparseparser = 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)
来源地址:https://blog.csdn.net/sinat_39620217/article/details/126579156