我在optparse中編寫了Option
和OptionParser
的子類。我重寫了OptionParser中的add_option
函數,使其解析了一個新的關鍵字。以下是我的代碼。覆蓋python中的OptionParser的add_option函數
from optparse import Option, OptionError, OptionParser
class MyOptionParser(OptionParser):
def add_option(self,*args,**kwargs):
##add the new keyword "deft". If deft="some value", kwargs[default] = deft
##else process args to get deft
if kwargs.has_key["deft"]:
newDef = kwargs["deft"]
del kwargs["deft"]
else:
newDef = process_args_for_deft(args)
if newDef!= None
kwargs["default"] = newDef
modOpt = OptionParser.add_option(self,*args,**kwargs)
class MyOption(Option):
def _set_opt_strings(self, largs, rargs, values):
#overridden method over here
現在,如果我這樣做,它工作正常。
parser = MyOptionParser()
parser.add_option("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE", deft ="xyz")
但如果我這樣做(我想),它給了我一個錯誤:MyOption實例沒有屬性「的GetItem」如果沒有指定DEF是,如果指定def
它給了我一個錯誤說沒有類型,如def
。
parser = MyOptionParser()
parser.add_option(MyOption("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE", def ="xyz"))
我認爲問題是,我傳遞一個對象時,我使用MyOption(選,參數),因此它是不能夠訪問ARGS/kwargs。我如何解決這個問題?
請發佈tracebacks,'process_args_for_def'和'MyOption._set_opt_strings'代碼。另外'def'是一個保留字,不能用作明確的參數名稱。 – 2013-04-04 20:58:39
你可以發佈完整的追溯?另外,命名一個變量'def'應該是不可能的,因爲它是一個關鍵字:它甚至如何運行? – 2013-04-04 20:59:56
我已經添加了'process_args_for_def','MyOption._set_opt_strings'和回溯。我有一個龐大的代碼庫,我只是試圖在這裏給出部分代碼。此外,我改變了kewword的名稱,並將其鍵入爲def而不是輕快。改變了它。謝謝 – user2242512 2013-04-04 22:16:10