python-parser.parse_args()解析參數問題
python-parser.parse_args()解析參數
import argparse #設置參數對象,簡要設置為該程序要執(zhí)行什么任務 parser = argparse.ArgumentParser("mission_name") #調用 add_argument() 方法添加參數 parser.add_argument('--ckpt', type=str, default="./weigths/jaad/best.pth", help="Path to model weigths") #使用 parse_args() 解析添加的參數 args = parser.parse_args()
使用argparse的第一步
是創(chuàng)建一個 ArgumentParser 對象:
對 ArgumentParser 構造方法的調用都會使用 description= 關鍵字參數(可以忽略description= 只傳遞關鍵字參數.
調用add_argument()方法添加參數
其中,包含的參數類型有:
name or flags
- 選項字符串的名字或者列表,例如 foo 或者 -f, --foo.action
- 命令行遇到參數時的動作,默認值是 store.store_const
-表示賦值為const;append
-將遇到的值存儲成列表,也就是如果參數重復則會保存多個值;append_const
-將參數規(guī)范中定義的一個值保存到一個列表;count
-存儲遇到的次數.
此外,也可以繼承 argparse.Action 自定義參數解析;
nargs
- 應該讀取的命令行參數個數,可以是具體的數字,或者是?號,當不指定值時對于 Positional argument 使用 default,對于 Optional argument 使用 const; 或者是 * 號,表示 0 或多個參數;或者是 + 號表示 1 或多個參數.const
- action 和 nargs 所需要的常量值.default
- 不指定參數時的默認值.type
- 命令行參數應該被轉換成的類型.choices
- 參數可允許的值的一個容器.required
- 可選參數是否可以省略 (僅針對可選參數).help
- 參數的幫助信息,當指定為 argparse.SUPPRESS 時表示不顯示該參數的幫助信息.metavar
- 在 usage 說明中的參數名稱,對于必選參數默認就是參數名稱,對于可選參數默認是全大寫的參數名稱.dest
- 解析后的參數名稱,默認情況下,對于可選參數選取最長的名稱,中劃線轉換為下劃線.
使用 parse_args() 解析添加的參數
ArgumentParser 通過 parse_args() 方法解析參數.它將檢查命令行,把每個參數轉換為適當的類型然后調用相應的操作
解決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 是一個旨在解析從命令行傳遞的參數的模塊,您可以使用 argparse 來編譯 參數內容。
如果 argparse 認為參數無效,則退出,這通常在 python 中通過調用 sys.exit() 來完成,這會引發(fā) SystemExit 錯誤,這就是您所看到的。
所以問題是你試圖從交互式解釋器(看起來像 ipython)中使用 argparse,此時程序已經啟動,所以應該已經解析了 args。
解決方法一
args = parser.parse_args() 改成 args = parser.parse_args(args=[])
原因分析:
1.args = parser.parse_args()
2.parse_args(args=["-n3","-b2"])#表示給n參數賦值為3,b參數賦值為2。其他參數默認。 parse_args(args=[])#表示所有參數使用默認。
而我們的報錯情況是形式1,一旦執(zhí)行parse_args()
語句,python系統(tǒng)就會執(zhí)行讀取參數的操作(我們看不到),此時jupyter notebook系統(tǒng)默認會給一個奇怪的參數:
因此:
將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=[])
解決方案三
開頭添加:
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)
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
python?管理系統(tǒng)實現(xiàn)mysql交互的示例代碼
這篇文章主要介紹了python?管理系統(tǒng)實現(xiàn)mysql交互,本文通過實例代碼圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12python實現(xiàn)通過flask和前端進行數據收發(fā)
今天小編就為大家分享一篇python實現(xiàn)通過flask和前端進行數據收發(fā),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08