if 语句未命中中的 continue 断点

2024-05-20

在下面的代码中,两者a and b是生成器函数的输出,并且可以评估为None或者有一个值。

def testBehaviour(self):
  a = None
  b = 5

  while True:
    if not a or not b:
      continue
    print('blaat')

如果我将断点(使用 Visual Studio Code)放在带有continue声明,以及与print声明,都没有被击中。这print语句没有被调用,循环只是按照预期无限期地运行,但我希望断点被命中。

如果我将代码更改为以下之一:

def testBehaviour(self):
  a = None
  b = 5

  while True:
    if not a:
      continue
    print('blaat')

or:

def testBehaviour(self):
  a = None
  b = 5

  while True:
    if not a or not b:
      c = 'dummy'
      continue
    print('blaat')

再次在带有以下内容的行上放置断点continue and print语句,断点被命中。

谁能告诉我为什么断点没有被命中?这似乎不仅仅发生在 Visual Studio Code 中,因为我们的代码覆盖工具还指出continue声明未被调用。

这是在 Windows 7 32 位上的 python 2.7 上。


操作码有一个优化,编译器可以识别if expr: continue.

使用时if not a or not b:

 11          12 SETUP_LOOP              35 (to 50)
        >>   15 LOAD_GLOBAL              1 (True)
             18 POP_JUMP_IF_FALSE       49

 12          21 LOAD_FAST                1 (a)
             24 UNARY_NOT
             25 POP_JUMP_IF_TRUE        15
             28 LOAD_FAST                2 (b)
             31 UNARY_NOT
             32 POP_JUMP_IF_FALSE       41

 13          35 JUMP_ABSOLUTE           15
             38 JUMP_FORWARD             0 (to 41)

 14     >>   41 LOAD_CONST               2 ('blaat')
             44 PRINT_ITEM
             45 PRINT_NEWLINE
             46 JUMP_ABSOLUTE           15
        >>   49 POP_BLOCK
        >>   50 LOAD_CONST               0 (None)
             53 RETURN_VALUE

线路25 POP_JUMP_IF_TRUE 15跳回 while 循环的开头(第 15 行)如果not a是真的。它永远不会到达 continue 语句的行35 JUMP_ABSOLUTE 15

如果您切换以下值a and b这个测试用例有效。

如果将测试表达式重写为if not ( a and b ):你会得到以下操作码

 11          12 SETUP_LOOP              33 (to 48)
        >>   15 LOAD_GLOBAL              1 (True)
             18 POP_JUMP_IF_FALSE       47

 12          21 LOAD_FAST                1 (a)
             24 JUMP_IF_FALSE_OR_POP    30
             27 LOAD_FAST                2 (b)
        >>   30 POP_JUMP_IF_TRUE        39

 13          33 JUMP_ABSOLUTE           15
             36 JUMP_FORWARD             0 (to 39)

 14     >>   39 LOAD_CONST               2 ('blaat')
             42 PRINT_ITEM
             43 PRINT_NEWLINE
             44 JUMP_ABSOLUTE           15
        >>   47 POP_BLOCK
        >>   48 LOAD_CONST               0 (None)
             51 RETURN_VALUE

这总是有效并且更快。这not操作被优化成跳转测试语句

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

if 语句未命中中的 continue 断点 的相关文章

随机推荐

  • 包含带重音符号的域的主要缺点是什么?

    我正在考虑获取一个包含重音字符的域 它包含 然而 我注意到只有一些公司提供它们 这些域是否存在普遍问题 或者我在使用这些域时是否会遇到某些缺点 DNS 协议仅支持 ASCII 带有重音字符的域被编码为 ASCII 使用Punycode ht
  • 重置转换后的 UIView 的原点会变得疯狂

    我使用 UIView transform 旋转 缩放 UIVIew 效果很好 然而 一旦我更改视图的框架原点 即使我没有执行任何进一步的 CGAffineTransforms 视图的内容也会开始 奇怪 地缩放 为什么会出现这种情况 我该如何
  • 以编程方式更新 Android 中的联系人姓名和电话号码

    我创建一个应用程序来读取 更新 删除联系人详细信息 这是更新联系人姓名和电话号码的问题 有人可以帮助我吗 我该怎么做 我正在使用以下代码 但它不起作用 Override public View onCreateView LayoutInfl
  • 使用 moment.js 检查输入日期是否为星期一

    好吧 我想检查日期是否是星期一 例如 var myDate new Date moment myDate DD MM YYYY dayIs monday 在我的国家 一周的第一天是星期一 所以 我真的想检查输入日期是否是一周的开始 我尝试使
  • 在 C++ 中处理汉字字符

    我有一个用 C 编写的 Windows 桌面应用程序 名为 Timestamp 使用 NET 称为 CLR 我还有用本机 c 编写的 DLL 项目 名为 Amscpprest 并使用 CPPREST SDK 从服务器获取 json 数据并将
  • Xcode 3.1.4 中内置分析器

    我想知道 Xcode 3 1 4 中内置的分析器是否使得单独使用 LLVM Clang 静态分析器变得多余 请参考这里的原文 使用 LLVM Clang 静态分析器查找内存泄漏 http www fruitstandsoftware com
  • 在 Python distutils 中从 setup.py 查找脚本目录的正确方法?

    我正在分发一个具有以下结构的包 mymodule mymodule init py mymodule code py scripts script1 py scripts script2 py The mymodule的子目录mymodul
  • 如何在android中设置多个闹钟,在这种情况下最后一个闹钟会覆盖以前的闹钟

    我正在开发一个Android应用程序 用户可以在其中设置提醒时间 但我在以下代码中遇到一个问题 即最后一个警报会覆盖之前的所有警报 MainActivity java public void setreminders DatabaseHan
  • 如何处理 ASP.net MVC Ajax 加载页面上的 jQuery 事件?

    我有一个问题 我是 jQuery Mobile 领域的新手 对于 ASP Net MVC 部分我有点迷失 这是我的问题 在我的移动网站中 我想更改导航栏 我使用的更像是应用程序栏 按钮 而我位于编辑页面或主页等 因此 这些页面 编辑 显示
  • 通过列表理解压平列表列表

    我正在尝试使用 python 中的列表理解来展平列表 我的清单有点像 1 2 3 4 5 6 7 8 只是为了打印这个列表列表中的单个项目 我编写了这个函数 def flat listoflist for item in listoflis
  • 应用内结算错误

    我的 UNMANAGED 应用内购买无法正常工作 在它完美运行之前 我可以使用测试帐户成功购买 但它突然不起作用了 因为我记得我对商家帐户所做的只是添加更多 2 4 个测试帐户 添加后 我的应用内购买将不起作用 所以我更新了公钥并上传了一个
  • 将数据帧行转换为字典

    我有像下面的示例数据这样的数据帧 我正在尝试将数据帧中的一行转换为类似于下面所需输出的字典 但是当我使用 to dict 时 我得到了索引和列值 有谁知道如何将行转换为像所需输出那样的字典 任何提示都非常感激 Sample data pri
  • CWWIM4537E 从主体名称 Websphere 中找不到主体

    我努力解决 找不到校长 问题 我阅读了所有文章 但我已成功将ear 文件安装到WAS 8 5 中 此应用程序需要最终用户进行 LDAP 身份验证才能登录 我的 LDAP 用户 ID 是正确的 因为我可以通过另一个部署了相同ear文件的开发环
  • 尝试在模拟器上安装第二个 flutter 应用程序时出错

    我创建了一个简单的 flutter 应用程序并在 android 模拟器上运行它 效果还不错 现在我创建了另一个 当我尝试在模拟器上运行它时 我得到 Error ADB exited with exit code 1 adb failed
  • 无法将“gather”输出的列名称更改为默认名称以外的任何名称

    我正在尝试使用gather in the tidyr包 但我无法更改默认名称的输出列名称 例如 df data frame time 1 100 a 1 100 b 101 200 df long df gt gather foo bar
  • 研究MySQL、SQLite源码了解RDBMS实现[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道实现数据库是一个很大的话题 但我想通过研究数据库系统的源代码来基本了解数据库系统的工作原理 例如
  • 如何让 Jenkins、Sonar 和 JaCoCo 插件在 Eclipse Tycho 插件项目(或者 Cobertura)中协同工作?

    我的设置是 詹金斯 1 448 声纳2 13 詹金斯声纳插件 1 72 Sonar 的 MySql 数据库 我有以下项目 Eclipse 插件项目 使用Maven 多个模块 父级 Maven 项目 源插件项目 测试片段项目 一个简单的 JU
  • 如何从作为 UWP 运行的 WPF 应用程序处理文件激活?

    我有一个WPF我想要处理文件激活的应用程序 我找到了通过向注册表添加特定值来解决问题的解决方案 问题是最终的应用程序应该是UWP应用程序 我正在使用桌面桥来执行此操作 如果应用程序运行为UWP 它无法到达注册表来设置这些特定值 有没有其他方
  • Django 模型在模板中不可迭代

    我试图迭代模型以获取列表中的第一个图像 但它给了我错误 即模型不可迭代 以下是我的模型和模板的代码 我只需要获取与单个产品相关的列表中的第一个图像 模型 py class Product models Model title models
  • if 语句未命中中的 continue 断点

    在下面的代码中 两者a and b是生成器函数的输出 并且可以评估为None或者有一个值 def testBehaviour self a None b 5 while True if not a or not b continue pri