|
|
1
24
不使用try/except的else块,只需在出错时返回:
这是一个可读性很好的蟒蛇…… 另一种方法是,不要担心具体的实现,例如,决定代码的外观。
然后编写
|
|
|
2
12
一般来说,您希望使用尽可能少的try块,通过它们抛出的异常类型来区分失败条件。例如,以下是我对您发布的代码的重构:
这里,我们使用的事实是smtplib.smtp()、server.login()和server.sendmail()都抛出了不同的异常来扁平try-catch块的树。在finally块中,我们显式测试服务器,以避免对nil对象调用quit()。 我们也可以用三个 相继的 尝试catch块,如果有重叠的异常情况需要单独处理,则在异常条件中返回false:
这并不是很好,因为您必须在多个地方杀死服务器,但是现在我们可以在不同的地方以不同的方式处理特定的异常类型,而不需要维护任何额外的状态。 |
|
|
3
3
如果是我,我可能会做如下的事情:
捕获并调试所有错误,成功时返回值==true,如果进行了初始连接,则服务器连接将被正确清除。 |
|
|
4
1
只需使用一个试块就可以了。这正是他们 设计用于:仅当上一个语句 语句没有引发异常。资源清理方面, 如果需要清理的话,也许你可以检查一下资源 (例如myfile.is_open(),…)这确实增加了一些额外的条件,但是 只有在特殊情况下才能执行。处理这个案子 因为不同的原因,同样的例外会被提出,你 应该能够从异常中检索原因。 我建议这样的代码:
错误处理代码超过业务代码的情况并不少见。正确的错误处理可能很复杂。 但是为了提高可维护性,将业务代码与错误处理代码分开是很有帮助的。 |
|
|
5
1
我会尝试这样的方法:
所有方法(包括
这种方法的缺点是所有的方法都必须使用相同的参数。我选择了“无”,期望我所抛弃的方法最终会操纵类成员。
不过,这种方法的好处是相当可观的。首先,您可以向流程中添加几十个方法,而无需
你也可以疯狂地做这样的事情:
…尽管在这一点上,我可能会对自己说,“self,你在不创建命令类的情况下非常努力地工作命令模式。也许现在是时候了。” |
|
|
6
0
为什么不试一下:拦网?这样,如果发现任何异常,您将一直到异常。只要不同步骤的所有异常都是不同的,您总是可以知道触发异常的是哪个部分。 |
|
|
7
0
我喜欢大卫的回答,但是如果你被困在服务器异常上,你也可以检查服务器是否为无或状态。我稍微把这个方法展平了一点,它仍然是一个虽然不完美但在底部的逻辑中更可读的方法。
|