我正在研究一個簡單的Git/Redmine膠水腳本,但我在使用Python模塊的可選參數時遇到了一些困難。如何在使用子分析器時使argparse參數可選?
用下面的代碼:
import argparse
class MyClass:
def StartWork(self, issueNumber, **kwargs):
if issueNumber is None:
issueNumber = input("please enter an issue number: ")
else:
print("issue number detected")
print(issueNumber)
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='MyClass-command', help='Command to perform')
subparsers.required = True
startWorkParser = subparsers.add_parser('startwork', help='Command to begin work on a new branch')
startWorkParser.add_argument("issuenumber", type=int, help="The issue number used to create a local branch based on the specified issue number", nargs='?', default=None)
startWorkParser.set_defaults(func=MyClass.StartWork)
# Parse the arguments to make sure we have all the information requried to actually do something.
args = parser.parse_args()
mc = MyClass()
try:
args.func(mc, **vars(args))
except AssertionError as e:
print("Error: "+str(e))
# Parse the arguments to make sure we have all the information required to actually do something.
args = parser.parse_args()
我期望這樣的電話:
python MyClass.py startwork
...導致用戶被提示輸入問題單號碼。相反,我得到:
Traceback (most recent call last):
File "C:\Projects\RedmnieGlue\MyClass.py", line 23, in <module>
args.func(mc, **vars(args))
TypeError: StartWork() missing 1 required positional argument: 'issueNumber'
那麼爲什麼nargs='?'
不在這裏盛行?
編輯
如果我這樣稱呼它:
python MyClass.py startwork -h
我得到這個:
usage: class1.py startwork [-h] [issuenumber]
positional arguments:
issuenumber The issue number used to create a local branch based on the
specified issue number
optional arguments:
-h, --help show this help message and exit
...這(根據各地issuenumber
的[]
)建議我它是瞭解這是一個可選的參數,但事端克正在阻止它按我期望的那樣工作。與我使用subparsers
和使用arg解析器調用方法有什麼關係?
我能夠無任何錯誤地運行此代碼。 –
(1)'def StartWork(...)'中有一個語法錯誤(缺少尾部冒號)。 (2)錯誤信息與顯示的代碼不匹配(例如,沒有'Main'功能),所以在你的代碼中出現的錯誤不會在你的簡化版本中顯示。 – poke
這是試圖將原始代碼削減爲可行的例子。我會解決它,所以它是一個完整的工作解決方案... –