如何打印调用的函数?

2023-11-24

在调试 Python 脚本时,我真的很想知道整个程序的整个调用堆栈。理想的情况是,如果 python 有一个命令行标志,它会导致 Python 在调用时打印所有函数名称(我检查过man Python2.7,但没有找到此类内容)。

由于此脚本中的函数数量较多,如果可能的话,我不希望在每个函数和/或类的开头添加打印语句。

中间解决方案是使用 PyDev 的调试器,放置几个断点并检查程序中给定点的调用堆栈,因此我暂时使用这种方法。

如果存在这样的方法,我仍然希望看到在程序的整个生命周期中调用的所有函数的完整列表。


您可以使用跟踪函数来做到这一点(支持 Spacedman 改进其原始版本以跟踪返回并使用一些漂亮的缩进):

def tracefunc(frame, event, arg, indent=[0]):
      if event == "call":
          indent[0] += 2
          print("-" * indent[0] + "> call function", frame.f_code.co_name)
      elif event == "return":
          print("<" + "-" * indent[0], "exit function", frame.f_code.co_name)
          indent[0] -= 2
      return tracefunc

import sys
sys.setprofile(tracefunc)

main()   # or whatever kicks off your script

请注意,函数的代码对象通常与关联函数具有相同的名称,但并非总是如此,因为函数可以动态创建。不幸的是,Python 不跟踪堆栈上的函数对象(我有时幻想为此提交一个补丁)。尽管如此,在大多数情况下这确实“足够好”。

如果这成为一个问题,您可以从源代码中提取“真实”函数名称(Python 会跟踪文件名和行号),或者要求垃圾收集器找出哪个函数对象引用了代码对象。可能有多个函数共享代码对象,但它们中的任何一个名称都可能足够好。

四年后再次回顾这个问题时,我有必要提到,在 Python 2.6 及更高版本中,您可以通过使用获得更好的性能sys.setprofile()而不是sys.settrace()。可以使用相同的跟踪功能;只是只有在进入或退出函数时才会调用 profile 函数,因此函数内部的内容会全速执行。

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

如何打印调用的函数? 的相关文章

  • (discord.py) 尝试更改成员角色时,“用户”对象没有属性“角色”

    因此 我正在尝试编写一个机器人 让某人在命令中指定的主持人指定的一段时间内暂停角色 我知道该变量称为 小时 即使它目前以秒为单位 我稍后会解决这个问题 基本上 它是由主持人在消息 暂停 personmention numberofhours
  • Django REST序列化器:创建对象而不保存

    我已经开始使用 Django REST 框架 我想做的是使用一些 JSON 发布请求 从中创建一个 Django 模型对象 然后使用该对象而不保存它 我的 Django 模型称为 SearchRequest 我所拥有的是 api view
  • Python、Tkinter、更改标签颜色

    有没有一种简单的方法来更改按钮中文本的颜色 I use button text input text here 更改按下后按钮文本的内容 是否存在类似的颜色变化 button color red Use the foreground设置按钮
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • 如何打印没有类型的defaultdict变量?

    在下面的代码中 from collections import defaultdict confusion proba dict defaultdict float for i in xrange 10 confusion proba di
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • Python 分析:“‘select.poll’对象的‘poll’方法”是什么?

    我已经使用 python 分析了我的 python 代码cProfile模块并得到以下结果 ncalls tottime percall cumtime percall filename lineno function 13937860 9

随机推荐

  • 为什么锁被捕获到局部变量

    在java JRE中我看到the code private final ReentrantLock lock public E poll final ReentrantLock lock this lock lock lock 为什么锁被捕
  • 当我在 OS X Mavericks 上运行 mvn 时,出现以下错误:无法运行程序“/bin/sh”:错误=2,没有这样的文件或目录

    我在 MacBook Pro 上运行 OS X Mavericks 我安装了maven 3 0 5 当我运行 mvn 时 收到以下错误消息 Error while executing process Cannot run program b
  • 如何以编程方式将 GPO 设置为未配置或禁用

    我正在寻找一种编程解决方案 其效果与在 GPOE 中设置 配置 Windows NTP 客户端 状态相同Administrative Templates gt System gt Windows Time Service gt Time P
  • 如何在c#.Net中创建透明面板

    我在 Windows 窗体上有一个面板 面板内有几个控件 我可以让面板完全透明吗 它应该给人一种控件直接放置在 Form 上的感觉 如果您转到 BackColor 属性 并将选择器更改为 Web 则第一个选择是 透明 至少在我的 VB ID
  • 播放音频文件的c程序

    你能给出一个用C语言播放音频文件的示例代码 以及需要哪些头文件吗 我对这个概念很陌生 我有兴趣学习这个 您可以使用 PortAudio 库 PortAudio 是一个免费 跨平台 开源的音频 I O 库 它可以让您用 C 编写简单的音频程序
  • addEventListener() 到不存在的元素?

    我已附上一个click元素上的事件侦听器 例如 document querySelector class name addEventListener click function 该元素可能会也可能不会从服务器端生成 因此 如果服务器生成该
  • git工作流程:每个人都有一个分支,还是每个人都有一个master?

    当多人使用 git 一起工作时 是不是更好 让每个人都在 master 中工作 并在彼此的 master 之间合并 或者 让每个人都在自己有头衔的分支机构工作 在我看来 在 1 的情况下 虽然每个主节点都充当一个分支 但每个人都应该以大多数
  • 在 Monodroid 应用程序中重用 Monotouch 代码

    我目前正在实现一个 Monotouch 应用程序 最终将移植到 Monodroid 该应用程序只是 OData Web 服务的客户端 没有什么太花哨或对性能至关重要的东西 挑战是重用尽可能多的代码 我知道 Monotouch 和 Monod
  • PTVS:如何在一个项目中从第二个项目引用或使用 Python 源代码

    在带有 PTVS 的 Visual Studio 中我有两个分开的Python 项目 其中包含一个名为lib py用作函数库 另一个是使用库中函数的 main 我正在使用一个importmain 中的语句引用库项目中的函数 但出现以下错误
  • 如果编辑器的宽度太小,是否有办法将工具栏按钮包装到 TinyMCE 的下一行?

    我在高级主题中使用 TinyMCE 今天我必须提前指定每个工具栏行中的按钮 theme advanced buttons1 theme advanced buttons2 和 theme advanced buttons3 如果编辑器的宽度
  • PHP 重定向不安全吗?

    嗯 我真的无法确定任何不安全因素 但想知道你是否可以 如果可以 如何修补 修复 代码如下 header Location http example com search POST term POST type 我重定向的网站也在他们这边进行
  • 在新的 Android Studio 3.1 上构建时出错

    我将 Android Studio 更新到 3 1 稳定版本 并在尝试构建项目时收到此错误 起初存在问题DataBinding 我修复了它们 然后我发现了这个问题 org gradle api GradleException Compila
  • 仅从 for 循环中打印一次消息

    我想查找列表元素中是否包含特定字符串 如果找到该字符串 我想打印出 找到字符串 否则 找不到字符串 但是 我想出的代码会多次打印 找不到字符串 我知道原因 但我不知道如何修复它并只打印其中一条消息一次 animals dog mouse c
  • Svg 多边形舍入

    我正在开发一个使用 svg 移动 旋转 缩放功能的应用程序 我正在 Laravel 中编写后端 前端使用 html css javascript 我在网上看到折线可能有某种三次贝塞尔曲线 现在我的问题是 多边形 svg 元素是否可能具有与折
  • Symfony2 路由全局 {_locale} 要求

    我在routing yml 中指定了每个路由中的参数 locale 要求 我认为这一定可以简化这种情况 路由 yml ProjectBaseBundle index pattern locale defaults controller Pr
  • opencv 中体积图像的 3D 图像处理

    我期待 Opencv 中 3D 图像处理的教程 我有 O Reilly 出版的书 这是一本关于 Opencv 中的 2D 图像处理的好书 谁能给我介绍一些 3D 图像处理的资源吗 本问题中的 3D 图像代表体数据 通常指 CT MRI 数据
  • node.js 只输出三个点[重复]

    这个问题在这里已经有答案了 我在 Windows 计算机上安装了 node js 并打开了命令提示符 当我尝试 Hello World 示例时 我得到的唯一输出是三个点 node hello js 我做错了什么吗 node hello js
  • C# 反射:使用字符串类名实例化对象

    我的情况如下 我正在使用 Visual C 2010 Express 开发 Windows 窗体应用程序 当用户登录时 动态地构建一个菜单条 其中包含从数据库表加载的选项 在该表中 我保存 ID 选项名称和表单名称 所以 假设在我的项目中我
  • JSF 中“记住我”的 Cookie

    我有一个登录页面 我想添加 记住我 功能 这样 如果用户注销并再次打开页面 则会加载他的用户名和密码 为此 当用户登录 并选中 记住我 时 我会保存以下 cookie FacesContext facesContext FacesConte
  • 如何打印调用的函数?

    在调试 Python 脚本时 我真的很想知道整个程序的整个调用堆栈 理想的情况是 如果 python 有一个命令行标志 它会导致 Python 在调用时打印所有函数名称 我检查过man Python2 7 但没有找到此类内容 由于此脚本中的