“sys.settrace”在 Python 3.5 中可以正常工作,但在 Python 3.6 中不能正常工作吗?

2024-03-29

在尝试回答另一个问题时,我突然意识到,当理论上您不应该拥有控制权时,您可以在线程中随时运行代码。 CPython 有一个settrace用于在代码中注册跟踪函数的函数。为了通过使用类来测试这个想法,编写了以下代码。问题是跟踪似乎没有发生,并且跟踪日志中没有生成任何数据。下面所示的代码中出现问题的原因是什么?

#! /usr/bin/env python3
import atexit
import collections
import pprint
import sys


def main():
    i = create_instance()
    print(len(i.data), flush=True)


def create_instance():
    instance = Tracer()
    return instance


class Tracer:

    def __init__(self):
        self.data = []
        sys.settrace(self.trace)
        atexit.register(pprint.pprint, self.data)
        atexit.register(sys.settrace, None)

    def trace(self, frame, event, arg):
        print('Tracing ...', flush=True)
        self.data.append(TraceRecord(frame, event, arg))
        return self.trace


TraceRecord = collections.namedtuple('TraceRecord', 'frame, event, arg')


if __name__ == '__main__':
    main()

附录:

在 Windows 上运行 Python 3.5 时,该问题并不明显。但是,Python 3.6 中不会进行跟踪,因此不会打印跟踪日志。如果有人可以为我确认该错误是一个很好的答案,那么提交的内容很有可能被接受并获得赏金。


我尝试了你的程序,确实如发布的那样,它没有任何可跟踪的内容。内置函数print() and len()不生成跟踪事件,大概是因为它们是由平台定义的,并且假设它们的内部工作正常并且不有趣。

文档指出:

每当进入新的本地作用域时,都会调用跟踪函数(事件设置为“call”);

我修改了你的程序来定义一个函数并调用它。当我这样做时,你的跟踪函数被调用。

我定义的函数:

def doSomething():
  print("Hello World")

我的版本是你的main()功能:

def main():
  i = create_instance()
  print(len(i.data))
  doSomething()
  print(len(i.data))

我看到的输出:

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

“sys.settrace”在 Python 3.5 中可以正常工作,但在 Python 3.6 中不能正常工作吗? 的相关文章

  • Pulp.pulpTestAll() 测试失败,太多值无法解压

    我的操作系统是window 7 Pulp版本是1 6 1 gurobi版本是7 0 1 可以成功导入gurobipy Pull solvers GUROBI确实通过了测试 所以我可以使用gurobi 然而 pulp solvers CPLE
  • 专门逐行调试

    我有一个用 Pascal 编写的脚本 我会以这种方式调试它 在每一行停止 转储内存中所有变量的值 然后转到下一行 是否可以使用 gdb 或其他 Linux 开源工具来完成此操作 使用选项编译文件 g fpc gpc g file pas R
  • Dataproc:使用 PySpark 从 BigQuery 读取和写入数据时出现错误

    我正在尝试读取一些 BigQuery 数据 ID my project mydatabase mytable 原始名称受保护 来自用户管理的 Jupyter Notebook 实例 内部Dataproc https cloud google
  • 使用 BeautifulSoup 在 python 中抓取多个页面

    我已经设法编写代码来从第一页中抓取数据 现在我不得不在这段代码中编写一个循环来抓取接下来的 n 页 下面是代码 如果有人可以指导 帮助我编写从剩余页面中抓取数据的代码 我将不胜感激 Thanks from bs4 import Beauti
  • Python 列联表

    作为我正在编写的项目的一部分 我正在生成很多很多列联表 工作流程是 获取具有连续 浮点 行的大型数据数组 并通过分箱将其转换为离散整数值 例如 结果行的值为 0 9 将两行切片为向量 X 和 Y 并生成列联表 https en wikipe
  • 如何在 Python 3.2 程序中优雅地包含 Python 3.3 from None 异常语法?

    我正在尝试重新引发异常 以便为用户提供有关实际错误的更好信息 Python 3 3 包括PEP 409 http www python org dev peps pep 0409 它添加了raise NewException from No
  • dask groupby 不合并分区

    我有一组数据 我想要对其进行一些简单的 groupby count 操作 但我似乎无法使用 dask 来完成此操作 我很可能不理解 dask 中执行 groupby reduce 的方式 特别是当索引位于分组键中时 所以我将用玩具数据来说明
  • 将文件添加到现有 zip 文件

    我正在使用 python 的zipfile module zip 文件位于以下路径 home user a b c test zip并在下面创建另一个文件 home user a b c 1 txt我想将此文件添加到现有的 zip 中 我这
  • buildozer android NDK 未下载 Ubuntu

    我使用的是 Ubuntu 16 04 LTS 操作系统 我已经在 python2 和 python3 中安装了 buildozer android sdk 已安装 但 buildozer 在下载 android NDK 时显示错误 请帮我解
  • 在 Python 中通过 TCP 套接字发送文件

    我已经成功地将文件内容 图像 复制到新文件 然而 当我通过 TCP 套接字尝试同样的事情时 我遇到了问题 服务器循环未退出 客户端循环在到达 EOF 时退出 但服务器无法识别 EOF 这是代码 Server import socket Im
  • 如何设置 QTableView 中特定单元格的线条样式?

    我正在使用 QT GUI 我正在使用 QTableView 实现一个简单的十六进制编辑控件 我最初的想法是使用一个有十七列的表格 表的每一行都有 16 个十六进制字节 然后在第十七列中显示该数据的 ASCII 表示形式 理想情况下 我想编辑
  • 打开文件对象的大小

    有没有办法找到当前打开的文件对象的大小 具体来说 我正在使用 tarfile 模块来创建 tarfile 但我不希望 tarfile 超过特定大小 据我所知 tarfile 对象是类似文件的对象 所以我想通用的解决方案会起作用 ls la
  • 如何将目录结构解析为字典?

    我有目录结构列表 例如 a b a b c a b c d a b c e a b c f g a b c f h a b c f i 我想将它转换成像树结构一样的字典 a b c d None e None f g None h None
  • 无需重新计算即可获取字典键哈希

    有没有办法从字典中提取现有的密钥哈希 而无需再次重新计算它们 暴露它们并因此通过哈希而不是密钥访问字典会有什么风险 我认为 Python 的字典对象没有任何公共 API 可以让您查看存储其对象的哈希值 您无法在 Python 代码中直接通过
  • Python 和 Scipy:如何拟合冯·米塞斯分布?

    我正在尝试拟合来自 scipy 的冯 米塞斯分布 http docs scipy org doc scipy reference generated scipy stats vonmises html http docs scipy org
  • 如何在 Jupyter 笔记本的 HTML 输出中获取垂直滚动条

    当使用具有 500 行的 Excel 在 Jupyter Notebooks 中运行以下代码时 import pandas as pd pd set option display min rows 50 pd set option disp
  • 识别输入的数据类型

    我正在尝试打印用户输入的数据类型并生成如下表 ABCDEFGH String 1 09 float 0 int true bool etc 我正在使用 Python 3 2 3 并且我知道我可以使用type 获取数据的类型 但在Python
  • 键入提示以返回类的实例,其中 typevar 是类类型[重复]

    这个问题在这里已经有答案了 如何编写返回类型提示来指示函数返回类 Class 的实例 Class TypeVar Class bound type def make class class Class gt Class return cla
  • 将行追加到 Pandas DataFrame 添加 0 列

    我正在创建一个 Pandas DataFrame 来存储数据 不幸的是 我无法提前知道我将拥有的数据行数 所以我的方法如下 首先 我声明一个空的 DataFrame df DataFrame columns col1 col2 然后 我附加
  • Objective-C 有没有办法捕获发送到 nil 的消息?

    我刚刚被一种烦人的东西咬了bug https stackoverflow com questions 913627 uiviewcontroller viewdidload not being calledObjective C 中的 向

随机推荐

  • 比较给出错误输出的日期

    我正在创建一个函数来检查充满日期的数据库表中哪个日期小于当前日期 和过去一样 我有 3 个日期来测试该函数 以及它们背后的输出 上个月的日期 2015年4月28日 16 32 00日期尚未到来 11 06 2015 13 12 00上周日期
  • java并发:多生产者一消费者

    我遇到一种情况 不同的线程填充一个队列 生产者 并且一个消费者从该队列中检索元素 我的问题是 当从队列中检索这些元素之一时 某些元素会丢失 丢失信号 生产者代码是 class Producer implements Runnable pri
  • Perl 如何在空格上分割行,除非空格用双引号引起来?

    我有以下字符串 StartProgram 1 C Program Files ABC ABC XYZ CleanProgramTimeout 1 30 我需要一个正则表达式来分割这一行 但忽略 Perl 中双引号中的空格 以下是我尝试过的但
  • Time.advance 记录在哪里?

    在网上查了一下 我发现 RubyTime班级有Time advance 这是在哪里记录的 我在 Ruby API 文档中没有看到任何提及它here http apidock com ruby Time API 文档的搜索功能表明 任何地方都
  • 将进程附加到远程 PC 上正在运行的进程

    我正在开发一个 C 应用程序 该应用程序在远程 PC 上运行 我有 VPN 连接并使用 RDP 会话 我可以登录到该计算机 在那台计算机上 在正在运行的进程旁边 还有两个 msvsmon exe 进程 在任务管理器中具有以下 命令行 条目
  • 尝试让 libmecab.dll (MeCab) 与 C# 一起使用

    我正在尝试使用日本形态分析仪MeCab http mecab sourceforge net 在 C 程序 Visual Studio 2010 Express Windows 7 中 编码出现问题 如果我的输入 粘贴到文本框中 是这样的
  • Pymongo 如何正确使用 $push 更新现有文档

    我做错了什么或者我不明白 push 可能不明白 无论如何 我有以下文件 id ObjectId 501c83051d41c8753e000000 node denver enc environment production classes
  • RSpec - 模拟(或存根)重写 mixin 方法

    我有这样的情况 module Something def my method return some symbol end end class MyClass include Something def my method if xxx o
  • 从 LAN 中的其他计算机使用 ASP.NET Web Api 服务

    我用谷歌搜索了这个问题 但找不到任何可以解决我的问题的东西 我是 ASP NET Web Api 的新手 我构建了一个 ASP NET Web Api 当我在本地计算机上从 Visual Studio 运行它时 一切都运行良好 在这两种情况
  • 从redux中的reducer获取ID

    我是个新手 正在尝试使用 React 和 Redux 构建一个简单的书签应用程序 我无法解决这个问题 用户可以创建一个书签并将其添加到多个文件夹 所以我派了一个addMark bookmark 行动 然后addMark folder or
  • Pandas:添加具有最新值的列

    我有两个 pandas 数据框 两个数据框都带有日期时间条目的索引 这df1具有非唯一的时间索引 而df2有独特的 我想添加一栏df2 a to df1通过以下方式 对于中的每一行df1带时间戳ts df1 a应包含最新值df2 a其时间戳
  • 如何从 Laravel 5 中的 AJAX 调用返回视图?

    我正在尝试获取一个 html 表以在 ajax 调用中返回 route Route post job userjobs JobController userjobs ajax调用页面 function getUserJobs userid
  • Google 地图、PHP 和 MySQL 上的附近位置搜索

    我正在构建一个网络应用程序 只是为了好玩 xD 您可以在其中告诉它您在哪里以及您想去哪里 然后您可以搜索您可以乘坐的巴士列表 我的数据库是这样的 buses id bus number bus description routes id b
  • 客户端列表的 MVC 自定义验证

    我正在尝试编写一个在客户端工作的自定义验证器 用于验证所有复选框是否已被选中 这是模型的声明 DeclarationsAccepted ErrorMessage You must tick all declarations public I
  • 德国 UI 文化 de-DE 小数更改为 asp.net 中的逗号值问题

    我在我的 ASP NET 应用程序中使用德国 UI 文化 我正在根据下拉列表中选择的语言更改应用程序的 UI 文化 在下拉列表中选择的索引更改时我正在使用此代码 Thread CurrentThread CurrentCulture new
  • 比较两个数组中的对象并根据 JavaScript 中的匹配返回

    我为此使用 React 但概念是在 javascript 中 因此 为了简单起见 我希望我可以省略 React 代码 我有两个需要过滤掉的数组 我的目标是映射一个数组并检查该对象的属性是否与另一个数组的对象中的属性匹配 第一个数组如下所示
  • 是否可以通过 ssh 查看张量板?

    我正在 ssh 服务器上远程运行张量流代码 例如 ssh X 电子邮件受保护 cdn cgi l email protection 在远程服务器上 它说You can navigate to http 0 0 0 0 6006 在这种情况下
  • 如何在Python中仅调用一次函数[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 这里我想在整个程序中只调用一次Web服务函数 如何做到这一点有人建议我 import sys os def web service maci
  • 适合许多glm模型:提高速度

    我正在编写一个函数来适应许多glm楷模 为了给您提供一些有关该函数的想法 我包含了一小部分代码 在几个 SO 用户的帮助下 该函数现在可以用于我的分析目的 然而 有时 特别是当样本量相对较小时 可能需要相当长的时间才能完成整个过程 为了减少
  • “sys.settrace”在 Python 3.5 中可以正常工作,但在 Python 3.6 中不能正常工作吗?

    在尝试回答另一个问题时 我突然意识到 当理论上您不应该拥有控制权时 您可以在线程中随时运行代码 CPython 有一个settrace用于在代码中注册跟踪函数的函数 为了通过使用类来测试这个想法 编写了以下代码 问题是跟踪似乎没有发生 并且