突然有个想法,如果有下面代码:
try:
容易出错的函数()
后续() #这个函数必须等前面函数,不出错才能执行
catch Exception e:
pass
你们会把后续函数放在哪里? try-catch 里面还是外面?
1
Monstercat 2017-01-19 13:30:44 +08:00
当然是里面了 try 的意义不就是这样吗
|
2
clino 2017-01-19 13:35:49 +08:00
如果后续需要依赖会出错的函数,那应该在里面
如果后续不依赖,出错了也要执行就放外面 |
3
mgna17 2017-01-19 13:41:09 +08:00
python 的话,我喜欢放 else 里面
|
4
coolair 2017-01-19 13:44:31 +08:00 via Android
红帽有偏文章,说是像 if xxx==True 这样的语句可以用 try catch 来写尽量用 try catch ,说是更 pythonic
|
5
pppy 2017-01-19 13:56:22 +08:00
尽量用 try except 。(针对 Python
●Throwing exceptions is not “ expensive ” in Python unlike e.g. Java. ● Rely on duck typing rather than checking for a specific type. |
6
QAPTEAWH 2017-01-19 14:00:20 +08:00
throw/catch (except/catch) 更能表达这个操作的本质, try 只是个定界符。
|
7
DingSoung 2017-01-19 14:13:51 +08:00
try 不冷处理所有的异常,不代表 try 了这一块就不会崩溃。
都知道容易出错了,就把容易出错的说一下处理,类型检查,越界,线程安全等等 |
8
DingSoung 2017-01-19 14:14:34 +08:00
看错了 我说的是 Objc
|
9
est 2017-01-19 14:17:43 +08:00
|
10
maomaomao001 2017-01-19 14:48:23 +08:00 via Android
JavaScript 里, tryc 似乎比 if 快很多
|
11
knightdf 2017-01-19 14:52:11 +08:00
这个。。。刚需而且没有对比,低不低没有意义
|
12
xjp 2017-01-19 15:07:44 +08:00 via iPhone
js 里尽量少用 try catch 因为 v8 引擎不会对 trycatch 进行优化
|
13
otakustay 2017-01-19 15:24:12 +08:00
1. 大部分情况下,不 throw 的 try 块基本不会有什么损失
2. 如 @xjp 所说 V8 有这问题,这属于 V8 太烂- - 3. try/catch 是业务控制,大部分时候容不得你用还是不用,我不建议为了所谓性能去把应该用异常的场合变成 return code 之类的方式 4. 但这并不代表鼓励你大块大块使用 try/catch ,需要的场合应该都只是一小块的关键代码 5. 对于 V8 这种场景,如果想减小 try/catch 对优化的影响,把 try/catch 放进一个独立函数中即可 |
14
glasslion 2017-01-19 15:58:10 +08:00
1. Python 的 try catch 性能损失很小
2. Python 社区一般会推荐使用 try-catch 风格的异常检查, 因为 2.1 try-catch 的代码往往比 检查 return code 更精简 2.2 检查 return code 可能会造成 race condition. 3. 你样例里的 后续() 不应该放在 try-catch 里。 一般 try-catch 里的代码应该尽量少, 但这和性能无关。 因为你的本意是捕捉 容易出错的函数() 里的异常, 而这段代码实际上做的是 捕捉 容易出错的函数() 和 后续() 的异常, 而后续() 往往不能直接套用前面的异常处理逻辑 |
16
ipwx 2017-01-19 16:36:51 +08:00
try: ... catch ... else: ...
|
18
Allianzcortex 2017-01-19 22:53:56 +08:00 via iPhone
.... . easier ask forgiveness than get permission ,所以写就好了
|
19
eyp82 2017-01-20 09:01:11 +08:00
Python 的 try..catch 有个蛋疼的问题是, 搞一下这个, 就要往右缩进 4 个字符, 有时逻辑复杂已经缩进了好多实在是不想因为这个再缩进了.
另外 try catch 包围起来的代码块里代码尽可能少, 尽量只放你要保护的代码, 其他的无关代码全拿到外面. |