python-parser.parse_args()解析參數(shù)問題
python-parser.parse_args()解析參數(shù)
import argparse
#設(shè)置參數(shù)對象,簡要設(shè)置為該程序要執(zhí)行什么任務
parser = argparse.ArgumentParser("mission_name")
#調(diào)用 add_argument() 方法添加參數(shù)
parser.add_argument('--ckpt', type=str, default="./weigths/jaad/best.pth", help="Path to model weigths")
#使用 parse_args() 解析添加的參數(shù)
args = parser.parse_args()使用argparse的第一步
是創(chuàng)建一個 ArgumentParser 對象:
對 ArgumentParser 構(gòu)造方法的調(diào)用都會使用 description= 關(guān)鍵字參數(shù)(可以忽略description= 只傳遞關(guān)鍵字參數(shù).
調(diào)用add_argument()方法添加參數(shù)
其中,包含的參數(shù)類型有:
name or flags- 選項字符串的名字或者列表,例如 foo 或者 -f, --foo.action- 命令行遇到參數(shù)時的動作,默認值是 store.store_const-表示賦值為const;append-將遇到的值存儲成列表,也就是如果參數(shù)重復則會保存多個值;append_const-將參數(shù)規(guī)范中定義的一個值保存到一個列表;count-存儲遇到的次數(shù).
此外,也可以繼承 argparse.Action 自定義參數(shù)解析;
nargs- 應該讀取的命令行參數(shù)個數(shù),可以是具體的數(shù)字,或者是?號,當不指定值時對于 Positional argument 使用 default,對于 Optional argument 使用 const; 或者是 * 號,表示 0 或多個參數(shù);或者是 + 號表示 1 或多個參數(shù).const- action 和 nargs 所需要的常量值.default- 不指定參數(shù)時的默認值.type- 命令行參數(shù)應該被轉(zhuǎn)換成的類型.choices- 參數(shù)可允許的值的一個容器.required- 可選參數(shù)是否可以省略 (僅針對可選參數(shù)).help- 參數(shù)的幫助信息,當指定為 argparse.SUPPRESS 時表示不顯示該參數(shù)的幫助信息.metavar- 在 usage 說明中的參數(shù)名稱,對于必選參數(shù)默認就是參數(shù)名稱,對于可選參數(shù)默認是全大寫的參數(shù)名稱.dest- 解析后的參數(shù)名稱,默認情況下,對于可選參數(shù)選取最長的名稱,中劃線轉(zhuǎn)換為下劃線.
使用 parse_args() 解析添加的參數(shù)
ArgumentParser 通過 parse_args() 方法解析參數(shù).它將檢查命令行,把每個參數(shù)轉(zhuǎn)換為適當?shù)念愋腿缓笳{(diào)用相應的操作
解決SystemExit: 2,args = parser.parse_args()問題
報錯
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 是一個旨在解析從命令行傳遞的參數(shù)的模塊,您可以使用 argparse 來編譯 參數(shù)內(nèi)容。
如果 argparse 認為參數(shù)無效,則退出,這通常在 python 中通過調(diào)用 sys.exit() 來完成,這會引發(fā) SystemExit 錯誤,這就是您所看到的。
所以問題是你試圖從交互式解釋器(看起來像 ipython)中使用 argparse,此時程序已經(jīng)啟動,所以應該已經(jīng)解析了 args。
解決方法一
args = parser.parse_args() 改成 args = parser.parse_args(args=[])
原因分析:
1.args = parser.parse_args()
2.parse_args(args=["-n3","-b2"])#表示給n參數(shù)賦值為3,b參數(shù)賦值為2。其他參數(shù)默認。 parse_args(args=[])#表示所有參數(shù)使用默認。
而我們的報錯情況是形式1,一旦執(zhí)行parse_args()語句,python系統(tǒng)就會執(zhí)行讀取參數(shù)的操作(我們看不到),此時jupyter notebook系統(tǒng)默認會給一個奇怪的參數(shù):
因此:
將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=[])解決方案二
刪除參數(shù)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=[])
解決方案三
開頭添加:
import sys sys.argv=[''] del sys
解決方法四
添加一個接受上面那個參數(shù)的語句。
parser.add_argument('-f', type=str, default="讀取額外的參數(shù)")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參數(shù)
args = parser.parse_args()
print(args.file)總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- 一文詳解Python可變參數(shù)(*args與**kwargs)的使用方法和應用場景
- Python在*args和**kwargs上強制規(guī)定參數(shù)簽名的技巧詳解
- Python函數(shù)參數(shù)*args和**kwargs的區(qū)別與使用指南
- Python中args和kwargs用法與區(qū)別舉例詳解
- Python中魔法參數(shù)?*args?和?**kwargs使用詳細講解
- 深入理解Python中的*args和**kwargs參數(shù)(示例代碼)
- 一文帶你精通Python中*args和**kwargs的應用技巧
- Python中*args與**kwargs的高級應用指南
- Python中*args和**kwargs的作用
- python中的關(guān)鍵字參數(shù)*args和**kwargs詳解
- 一起解密Python中的*args和**kwargs無限可能的函數(shù)參數(shù)
- Python可變參數(shù)中星號args與雙星號kwargs的使用
相關(guān)文章
python使用matplotlib繪制圖片時x軸的刻度處理
在使用matplotlib繪制圖片時,x軸的刻度可能比較密集,特別是以日期作為x軸時,則最后會顯示不出來。這篇文章主要介紹了python使用matplotlib繪制圖片時x軸的刻度處理,需要的朋友可以參考下2021-08-08
Python WXPY實現(xiàn)微信監(jiān)控報警功能的代碼
本篇文章主要介紹了Python WXPY實現(xiàn)微信監(jiān)控報警功能的代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10
Python?設(shè)計模式創(chuàng)建型單例模式
這篇文章主要介紹了Python?設(shè)計模式創(chuàng)建型單例模式,即Singleton,單例是一種設(shè)計模式,應用該模式的類只會生成一個實例,下文詳細介紹需要的小伙伴可以參考一下2022-02-02
解決Jupyter Notebook “signal only works&nb
這篇文章主要介紹了解決Jupyter Notebook “signal only works in main thread“問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01

