gpt4 book ai didi

python-3.x - 即使在任何时候都不访问e,都将异常定义为变量(作为e除外的异常)的最佳实践吗?

转载 作者:行者123 更新时间:2023-12-03 08:20:57 27 4
gpt4 key购买 nike

如果我们不使用e异常不做任何事情,那是更好的做法:

except Exception:
pass

要么
except Exception as e:
pass

我很好奇,即使我们以后不访问 except Exception as e:对象,编写 e是否是最佳实践。

最佳答案

如果您不打算使用该异常,则不应命名该异常。

您实际上可以从反汇编中看到except Error:方法更有效,因为它不必创建e变量:

>>> def foo1():
... try:
... 1 / 0
... except ZeroDivisionError:
... pass
...
>>> def foo2():
... try:
... 1 / 0
... except ZeroDivisionError as e:
... pass
...
>>> import dis
>>> dis.dis(foo1)
2 0 SETUP_EXCEPT 12 (to 14)

3 2 LOAD_CONST 1 (1)
4 LOAD_CONST 2 (0)
6 BINARY_TRUE_DIVIDE
8 POP_TOP
10 POP_BLOCK
12 JUMP_FORWARD 20 (to 34)

4 >> 14 DUP_TOP
16 LOAD_GLOBAL 0 (ZeroDivisionError)
18 COMPARE_OP 10 (exception match)
20 POP_JUMP_IF_FALSE 32
22 POP_TOP
24 POP_TOP
26 POP_TOP

5 28 POP_EXCEPT
30 JUMP_FORWARD 2 (to 34)
>> 32 END_FINALLY
>> 34 LOAD_CONST 0 (None)
36 RETURN_VALUE
>>> dis.dis(foo2)
2 0 SETUP_EXCEPT 12 (to 14)

3 2 LOAD_CONST 1 (1)
4 LOAD_CONST 2 (0)
6 BINARY_TRUE_DIVIDE
8 POP_TOP
10 POP_BLOCK
12 JUMP_FORWARD 34 (to 48)

4 >> 14 DUP_TOP
16 LOAD_GLOBAL 0 (ZeroDivisionError)
18 COMPARE_OP 10 (exception match)
20 POP_JUMP_IF_FALSE 46
22 POP_TOP
24 STORE_FAST 0 (e)
26 POP_TOP
28 SETUP_FINALLY 4 (to 34)

5 30 POP_BLOCK
32 LOAD_CONST 0 (None)
>> 34 LOAD_CONST 0 (None)
36 STORE_FAST 0 (e)
38 DELETE_FAST 0 (e)
40 END_FINALLY
42 POP_EXCEPT
44 JUMP_FORWARD 2 (to 48)
>> 46 END_FINALLY
>> 48 LOAD_CONST 0 (None)
50 RETURN_VALUE

任何阅读您的代码的人都可以立即清楚地知道,如果您不命名该异常,那么您就不会对其进行任何操作(记录它,更改它等)。

关于python-3.x - 即使在任何时候都不访问e,都将异常定义为变量(作为e除外的异常)的最佳实践吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57160064/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com