python - PyCharm 在“通过”时没有达到快速和脏断点
问题描述
我想添加一个快速而肮脏的断点,例如当我有兴趣在迭代一个长列表的中间停止时。
for item in list:
if item == 'curry':
pass
我在 上放了一个断点pass
,它没有被命中(!)。
如果我添加以下(空)打印
for item in list:
if item = 'curry':
pass
print('')
and 断点pass
and print
, onlyprint
被命中。
知道为什么吗?Windows 7,(便携式)Python 3.7
[更新] 根据@Adam.Er8 的评论表单,我尝试插入省略号文字并对其进行断点,...
但这没有被击中,尽管以下print('')
是。
[Updtae++] 嗯,它确实在pass in
for key, value in dictionary.items():
pass
解决方案
实际上并pass
没有进入字节码。代码与不存在时完全相同。dis
您可以使用该模块看到这一点。(在 linux 上使用 3.7 的示例)。
>>> import dis
>>> dis.dis(dis.dis('for i in a:\n\tprint("i")')
1 0 SETUP_LOOP 20 (to 22)
2 LOAD_NAME 0 (a)
4 GET_ITER
>> 6 FOR_ITER 12 (to 20)
8 STORE_NAME 1 (i)
2 10 LOAD_NAME 2 (print)
12 LOAD_CONST 0 ('i')
14 CALL_FUNCTION 1
16 POP_TOP
18 JUMP_ABSOLUTE 6
>> 20 POP_BLOCK
>> 22 LOAD_CONST 1 (None)
24 RETURN_VALUE
>>> dis.dis('for i in a:\n\tpass\n\tprint("i")')
1 0 SETUP_LOOP 20 (to 22)
2 LOAD_NAME 0 (a)
4 GET_ITER
>> 6 FOR_ITER 12 (to 20)
8 STORE_NAME 1 (i)
3 10 LOAD_NAME 2 (print)
12 LOAD_CONST 0 ('i')
14 CALL_FUNCTION 1
16 POP_TOP
18 JUMP_ABSOLUTE 6
>> 20 POP_BLOCK
>> 22 LOAD_CONST 1 (None)
24 RETURN_VALUE
字节码所做的与两个块相同的事实并不相关。pass
只是被忽略了,所以调试器没有什么可以中断的。
推荐阅读
- python-3.x - 如何在 python boto3 中获取 iam 用户的 aws 托管策略的策略文档?
- python - 无法在 MacOS 上回滚到旧的 TensorFlow 版本
- c# - 我是在传递对同一个 subTile(对象)的引用还是数组有一个单独的 subTile(对象)?
- java - 实现以键为谓词的 KV 结构的恒定查找时间
- javascript - 在android上使用FB webview登录-无法通过“确认”步骤,因为按下“确认”时仅单击“取消”按钮
- c++ - 寻找更好的方法将 Gstreamer 中的帧捕获到 glade 中的图像容器中
- c# - 如何使用 azure 应用服务访问网络驱动器文件
- typescript - Typescript 语法构造 `[x: string]: T` 解释
- swift - 在 SwiftUI 中计算
- javascript - 在 JavaScript (TypeScript) 中创建可配置库