2013-03-17 72 views
3

我是python新手。我已經做了一些關於python鴨子打字的研究,而且我陷入了下面的情況。Python SMTP.starttls參數

當我查看Python標準庫時,我發現API僅指定參數的名稱,這些參數似乎給出了要傳遞的內容的提示,但提供了類型。這使我依靠直覺。所以,當我將錯誤的對象傳遞給函數時,聽起來就像是在玩一個試驗性的錯誤遊戲。

例如,在Python標準庫的smtplib,我想利用這個功能:

SMTP.starttls([keyfile[, certfile]])

但我不知道我應該進入密鑰文件或certFile中的參數什麼類型的對象?我該如何解決這個問題?

+2

您可能想舉一個例子。 – 2013-03-17 02:42:20

+0

我發現文檔確實說明了函數和方法參數的類型以及語義。 – dsh 2013-03-17 02:50:22

+0

我編輯了你的問題,並將它從關於在Python和Java中輸入鴨子的更有爭議的問題上移開。如果你更具體地說出你的問題,它會得到更好的迴應。 – 2013-03-17 03:11:35

回答

4

這可能只是不熟悉Python和文檔而不是鴨子打字問題。

在您的特定示例中,您必須稍微遵循一下文檔。

SMTP.starttls()方法,it says

如果提供密鑰文件和certFile中,這些被傳遞到插座 模塊的ssl() function

如果按照這個鏈接,你會看到:

密鑰文件和certFile中的參數指定可選的文件,這 包含證書被用來識別 連接的本地側。有關 證書如何存儲在證書文件中的更多信息,請參見Certificates的討論。

編輯:keyfilecertfile參數似乎是文件名(字符串)。如果你點擊鏈接Certificates,你會發現文件應該是PEM格式。

感謝J.F.塞巴斯蒂安的提示。

+0

感謝布萊恩,如果我想實現一個關鍵對象,哪個方法starttls需要從keyfile。我必須閱讀starttls的代碼才能看到它需要什麼嗎? – Sensor 2013-03-17 03:24:28

+1

@ user84605:'keyfile'和'certfile'是文件名('str'對象)。這些文件是[pem格式](http://docs.python.org/2/library/ssl.html?highlight=ssl#ssl-certificates)。 – jfs 2013-03-17 06:11:53

+0

@ J.F.Sebastian謝謝你,我已經更新了我的答案。 – 2013-03-17 17:21:58