Python SMTP.starttls 参数
我刚开始学习Python,最近在研究Python的鸭子类型,但遇到了一些困惑。
我发现Python的标准库里,很多API只说明了参数的名字,似乎给了我一些提示,但并没有告诉我应该传什么类型的东西。这让我只能靠直觉去判断。所以,当我把错误的对象传给函数时,就像在玩试错游戏一样。
举个例子,在Python的标准库smtplib里,我想用这个函数:
SMTP.starttls([keyfile[, certfile]])
但是我不知道应该传什么类型的对象给keyfile或certfile参数?我该怎么解决这个问题呢?
1 个回答
4
这可能只是对Python和相关文档不太熟悉,而不是鸭子类型的问题。
在你的例子中,你需要稍微遵循一下文档的说明。
在SMTP.starttls()
这个方法中,文档中提到:
如果提供了keyfile和certfile,这些会被传递给socket模块的ssl()函数。
如果你点击那个链接,你会看到:
keyfile和certfile参数指定了可选的文件,这些文件包含用于识别连接本地一方的证书。想了解证书是如何存储在certfile中的,可以查看证书的讨论。
补充:keyfile和certfile参数似乎是文件名(字符串)。如果你再点击证书的链接,你会看到这些文件应该是PEM格式的。
感谢J.F. Sebastian提供的提示。