2013-06-26 97 views
2

我正在使用OptionParser獲取腳本的某些命令行選項。我在腳本中有以下內容:訪問作爲保留關鍵字的python對象成員

parser.add_option("--pass", help="password used for authentication") 
(options, args) = parser.parse_args() 

OptionParser將所有選項都作爲命名成員放在一個對象上。因此,要訪問'通'中的選項,我不得不引用options.pass。這會拋出一個異常,因爲pass是一個保留關鍵字(我假設...我是一個python n00b)。

我如何訪問此會員以獲取數據?我知道我可以更改選項的名稱,但我很好奇如何在不更改名稱的情況下執行此操作。

回答

4

您可以使用getattr()函數按名稱檢索它:getattr(options, 'pass')。以這種方式訪問​​屬性時,您對如何命名的限制較少,就像在這種情況下您可以使用關鍵字一樣。

+0

哇。聽起來像是一個bug。 – Elazar

+0

@Elazar:什麼?您可以使用關鍵字作爲屬性名稱?請記住,無論如何,本質上屬性只是一本字典,所以它們可以具有相當任意的名稱應該不會令人驚訝 - 這只是從句法上來說它們不能用點表示法表示。 – FatalError

+0

對象可以具有無法使用點符號(即使從它自己的方法)訪問的屬性的事實聽起來像一個錯誤。這絕不是故意的「功能」。 'x.pass'有什麼問題?如果你不允許這樣做,你應該添加一個明確的檢查字典。哦,它太貴了嗎?所以請允許它。如果需要,更改語法。 – Elazar

2

使用getattr()功能找回它:getattr(options, 'pass')

然而,這將是最好不要使用保留的關鍵字作爲成員。你可以保持--pass選項,但它保存爲password本:

parser.add_option("--pass", help="password used for authentication", dest='password') 

然後,options.password是沒有問題的。