内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
当使用try-除了在for循环上下文中,到目前为止执行的命令显然是用
a = [1, 2, 3, 'text', 5] b = [] try: for k in range(len(a)): b.append(a[k] + 4) except: print('Error!') print(b)
结果与
Error! [5, 6, 7]
然而,对于列表理解而言,情况并非如此。
c=[] try: c = [a[k] + 4 for k in range(len(a))] except: print('Error!') print(c)
结果是
Error! []
在异常发生之前构建的中间列表是否保存在任何地方?可以进入吗?
让我们看看字节码:
>>> def example(): ... c=[] ... try: ... c = [a[k] + 4 for k in range(len(a))] ... except: ... print('Error!') ... print(c) ... >>> import dis >>> dis.dis(example) --- removed some instructions 27 GET_ITER >> 28 FOR_ITER 20 (to 51) 31 STORE_FAST 1 (k) 34 LOAD_GLOBAL 2 (a) 37 LOAD_FAST 1 (k) 40 BINARY_SUBSCR 41 LOAD_CONST 1 (4) 44 BINARY_ADD 45 LIST_APPEND 2 48 JUMP_ABSOLUTE 28 >> 51 STORE_FAST 0 (c) --- more instructions...