python中有关异常处理的求教?

论坛 期权论坛 工作     
爱用户   2019-10-11 13:20   3622   5
1#
热心回应  16级独孤 | 2019-10-11 13:20:11 发帖IP地址来自
1. assert 的语义要好一些,对入参的类型约束是一种契约,当然在静态类型语言里面是通过类型检查保证的,如果 assert 可能被优化选项消除,那么就造一个不会被消除的设施,比如 ensure(D 语言里面就是这个),这个比 if 好,if 是正常逻辑,ensure/assert 提示读者:这是一个契约

2. 简单说,凡是异常就应该用 try-catch,凡不是异常就该用 if,当然这是废话……大体上,如果这个调用有对应的 C 调用,manpage 里面返回值是错误的情况应该用异常,正常返回值的情况应该用 if。题主举的例子,不仅在技术上应该用 try-catch,因为 if 判断可能失效,就是在语义上也应该用 try-catch,因为那确实是异常。
2#
热心回应  16级独孤 | 2019-10-11 13:20:12 发帖IP地址来自

3#
热心回应  16级独孤 | 2019-10-11 13:20:13 发帖IP地址来自
  • “这个函数只能处理 dict 类型的数据,如果不是dict将会产生错误的结果。”对这种情况,肯定是用 if,但 if 并不是重点,if 块的内容才是重点。pythonista 会这样写:if not instance(...):raise MyError(...),以确保“错误的结果”不会发生。
  • 什么时候用 try,什么时候用 if。一个简单的原则:大部分时候都会成功(即用 if 的话条件表达式为 True),就用 try;大部分时候会失败(即用 try 的时候会抛出异常),就用 if。
4#
热心回应  16级独孤 | 2019-10-11 13:20:14 发帖IP地址来自
可控的用if
不可控的用异常

e.g. 比如打开文件,这个是不可控的,所以用异常
5#
热心回应  16级独孤 | 2019-10-11 13:20:15 发帖IP地址来自
1.异常是处理我们正常的处理流程以外的东西。
2.if是用于我们正常的判断流程。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:31799
帖子:6375
精华:1
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP