来自Java背景,当我被警告我没有捕获异常而不必阅读文档时,我喜欢它.如果我确实阅读了有关方法的文档,则抛出的异常会在文档的方法签名中显示.
使用Python,我必须经常阅读文档中的一段文字,找到一个句子,说明将抛出什么异常.
此外,我今天在Python中使用了第三方库,http://packages.python.org/kombu/reference/kombu.connection.html,这激怒了我.没有标准的文档格式?我使用的是通道方法(http://packages.python.org/kombu/reference/kombu.connection.html#kombu.connection.BrokerConnection.channel),它甚至没有声明它会引发异常.我必须通过反复试验找到这个.
我在这里遗漏了一些明显的东西,或者在Python及其文档中将异常视为事后的想法.
小智 14
我们喜欢例外.它们是非常重要的语言功能.好的文档通常会说明在哪些情况下会抛出什么异常,而且我个人发现大多数文档在这方面都很好.当然,总有一定比例的文档不好.无论哪种方式,如果你正在为每个功能寻找一个明确的独立列表,那你就不走运了.除了编写代码的程序员之外,没有人知道这一点.
阅读一段对我来说听起来并不是太糟糕,特别是因为段落的信息通常非常重要.然后就是<Ctrl+F>raises<Enter>......
没有标准的文档格式?
有许多项目使用的Sphinx(包括docs.python.org所以你已经知道它;还包括你链接到的项目,尽管它使用不同的光学风格).当然,没有人可以强制每个项目都使用它,就像你不能强迫它们使用标准的编码风格一样.但老实说,我认为到目前为止我使用的所有项目除了两个(PyGame和LEPL)都使用了Sphinx.这可能是因为我必须使用相对较少的功能,这要归功于广泛的标准库,但仍然如此.
当我被警告说我没有抓到异常时我喜欢它
为什么?粗略猜测,60%的初学者获得的例外是因为他们没有正确编码,不是因为需要处理的一些特殊的环境状态.TypeError并且ImportError,例如,根本不会出现在无错误的编写良好的程序中(保存元编程和需要极端动态的部分).
通常,如果您希望编译器告诉您有关您尚未了解的代码的信息,那么您使用的是错误的语言.Python是动态的,你测试而不是静态分析.处理它.
Python对声明Java所做的异常没有相同的要求.大多数语言没有.就此而言,Java通常会抛出未立即声明的异常(NullPointerException任何人?).记录所有语言中的异常是礼貌的,但在一个我们甚至无法保证甚至会记录公共方法的世界中,这真的令人惊讶吗?
查看您正在使用的库,似乎您需要实例化一个Transport对象(真正引发Exception的东西)确实有一个抛出的异常列表.这是抛出异常的真实对象,而不是BrokerConnection.
你知道回溯模块吗?它可能有助于您将来追踪这些问题.