Matplotlib 的 show 函数触发不需要的输出

2024-01-13

每当我通过 Python v3.10.4 执行任何 Python 代码(无论是否在 Visual Studio Code v1.74.2 中进行调试)时,除了代码的正常输出之外,我还会在“调试控制台”窗口中获得如下所示的输出。否则,我的所有 Python 程序此时都可以正常工作并按预期运行。

1   HIToolbox                           0x00007ff81116c0c2 _ZN15MenuBarInstance22RemoveAutoShowObserverEv + 30
2   HIToolbox                           0x00007ff8111837e3 SetMenuBarObscured + 115
3   HIToolbox                           0x00007ff81118a29e _ZN13HIApplication11FrontUILostEv + 34
4   HIToolbox                           0x00007ff811183622 _ZN13HIApplication15HandleActivatedEP14OpaqueEventRefhP15OpaqueWindowPtrh + 508
5   HIToolbox                           0x00007ff81117d950 _ZN13HIApplication13EventObserverEjP14OpaqueEventRefPv + 182
6   HIToolbox                           0x00007ff811145bd2 _NotifyEventLoopObservers + 153
7   HIToolbox                           0x00007ff81117d3e6 AcquireEventFromQueue + 494
8   HIToolbox                           0x00007ff81116c5a4 ReceiveNextEventCommon + 725
9   HIToolbox                           0x00007ff81116c2b3 _BlockUntilNextEventMatchingListInModeWithFilter + 70
10  AppKit                              0x00007ff80a973f33 _DPSNextEvent + 909
11  AppKit                              0x00007ff80a972db4 -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1219
12  AppKit                              0x00007ff80a9653f7 -[NSApplication run] + 586
13  _macosx.cpython-310-darwin.so       0x0000000110407e22 show + 162
14  Python                              0x0000000100bb7595 cfunction_vectorcall_NOARGS + 101
15  Python                              0x0000000100c9101f call_function + 175
16  Python                              0x0000000100c8a2c4 _PyEval_EvalFrameDefault + 34676
17  Python                              0x0000000100c801df _PyEval_Vector + 383
18  Python                              0x0000000100c9101f call_function + 175
19  Python                              0x0000000100c8a2c4 _PyEval_EvalFrameDefault + 34676
20  Python                              0x0000000100c801df _PyEval_Vector + 383
21  Python                              0x0000000100b53f61 method_vectorcall + 481
22  Python                              0x0000000100c8a4f2 _PyEval_EvalFrameDefault + 35234
23  Python                              0x0000000100c801df _PyEval_Vector + 383
24  Python                              0x0000000100c9101f call_function + 175
25  Python                              0x0000000100c8a2c4 _PyEval_EvalFrameDefault + 34676
26  Python                              0x0000000100c801df _PyEval_Vector + 383
27  Python                              0x0000000100cf536d pyrun_file + 333
28  Python                              0x0000000100cf4b2d _PyRun_SimpleFileObject + 365
29  Python                              0x0000000100cf417f _PyRun_AnyFileObject + 143
30  Python                              0x0000000100d20047 pymain_run_file_obj + 199
31  Python                              0x0000000100d1f815 pymain_run_file + 85
32  Python                              0x0000000100d1ef9e pymain_run_python + 334
33  Python                              0x0000000100d1ee07 Py_RunMain + 23
34  Python                              0x0000000100d201e2 pymain_main + 50
35  Python                              0x0000000100d2048a Py_BytesMain + 42
36  dyld                                0x00007ff80741b310 start + 2432
  1. 尽管据我所知,我的任何 Python 程序中都没有任何内容可以直接导致这些行出现在调试控制台窗口中,但为什么这些行会出现在调试控制台窗口中?
  2. 它们有何帮助?如果需要,如何使用它们?
  3. 我怎样才能防止它们默认出现?

我结帐了有关 Python 调试的 Visual Studio Code 文档 https://code.visualstudio.com/docs/python/debugging但找不到任何可以解释这些线条的东西。我在 macOS Ventura v13.1 上运行 Visual Studio Code。


截至 2023 年 1 月 2 日更新

我发现我的初始帖子中不需要的输出是由 Python 程序中的 matplotlib.pyplot.show 函数触发的。即使我运行如下简单的程序,我也会得到该输出:

import matplotlib.pyplot as plt

x = [1, 2, 3]
y = [1, 2, 3]
plt.plot(x, y)

plt.show()

当我从上面的代码中删除 plt.show() 时,36 行不需要的输出不会出现,但图形也不会显示。同样,除了不需要的输出之外,我的所有带有 show 函数的 Python 程序似乎都能正常工作,包括由 show 函数触发的图形显示。我的 Mac 上安装了 Matplotlib 3.5.2。

如果我直接通过命令行运行相同的程序(假设 Python 程序的名称是test.py):

python3 test.py

但当我跑步时却不是test.py通过 IDLE(Python 的集成开发和学习环境)或 Jupyter Notebook 中的代码。

我可以从 Python 程序中删除 show 函数以避免不需要的输出,但图表将不会出现,我更喜欢使用 show 函数而不是临时解决方案。


截至 2023 年 1 月 4 日更新

I was 在 Matplotlib 论坛上建议 https://discourse.matplotlib.org/t/show-function-triggering-unwanted-output/23442这可能是 macOS Ventura v13.1 问题,因为最近开始报告在 macOS Ventura v13.1 下执行的不同程序出现类似问题。一位用户报告遇到类似的输出使用 Tkinter 的代码 https://www.reddit.com/r/learnpython/comments/zyukpk/weird_output_in_terminal_while_using_tkinter/和另一个使用名为 mpv 的视频播放器时 https://github.com/mpv-player/mpv/issues/11018.

该问题也与 macOS Ventura v13.1 有关,这并非难以置信,但我不知道如何解决,我的问题仍然存在。


截至 2023 年 1 月 6 日更新

将 Matplotlib 升级到 v3.6.2 但不需要的输出问题尚未解决。


截至 2023 年 1 月 8 日更新

尝试了 Matplotlib v3.6.2 和 Python v3.11.1。不需要的输出问题仍然存在。


截至 2023 年 1 月 15 日更新

已将此问题作为错误报告给 GitHub 上的 Matplotlib 开发人员:“[Bug]:显示函数触发不需要的额外输出#24997 https://github.com/matplotlib/matplotlib/issues/24997"


截至 2023 年 1 月 16 日更新

我发现只有当“系统设置”->“桌面和扩展坞”->“菜单栏”下的“自动隐藏和显示菜单栏”选项设置为Always(这是我的设置)或on Desktop Only。如果我将该选项设置为,则不会出现不需要的输出In Full Screen Only or Never.


截至 2023 年 1 月 18 日更新

GitHub 上的 Matplotlib 和 Python 开发人员都认为,他们可以重现的不需要的输出是 macOS Ventura 13.1 中的错误造成的,因此他们对此无能为力。

有关详细信息,请参阅我提到的在 GitHub 上为 Matplotlib 提交的错误报告以及我后来在 GitHub 上再次通过 Python/CPython 为 Tkinter 提交的错误报告之后的相应讨论:Tkinter 在最新的 macOS 中导致不需要的输出 https://github.com/python/cpython/issues/101067”。我还被告知,针对后者,反馈助理报告现已提交给苹果公司,内容涉及已发现的错误。


截至 2023 年 1 月 25 日更新

今天我将 Mac 上的 macOS 升级到了 Ventura 13.2(2 月中旬发布时进一步升级到了 Ventura 13.2.1)。没有任何变化,只是运行小程序时不需要的输出现在相当长(85 行)。和以前一样,程序运行良好,否则如果我更改 Mac 的菜单栏设置,则不会出现不需要的输出,例如,Never.


看了一会儿,它似乎与苹果菜单栏(又名顶部栏)有关。

“解决方法”

在您的 Mac 设置中,设置"Automatically hide and show the menu bar" to Never以避免获取这些堆栈跟踪日志。

> 存在的问题:

> 问题不存在:

结论

我知道这不是一个解决方案,但直到苹果解决这个问题HI工具箱导致这种情况的框架问题,您可以采取一些措施来避免被不需要的堆栈跟踪污染。

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

Matplotlib 的 show 函数触发不需要的输出 的相关文章

  • python 中的代表

    我实现了这个简短的示例来尝试演示一个简单的委托模式 我的问题是 这看起来我已经理解了委托吗 class Handler def init self parent None self parent parent def Handle self
  • python 模拟第三方模块

    我正在尝试测试一些处理推文的类 我使用 Sixohsix twitter 来处理 Twitter API 我有一个类充当 Twitter 类的外观 我的想法是模拟实际的 Sixohsix 类 通过随机生成新推文或从数据库检索它们来模拟推文的
  • 将数据帧行转换为字典

    我有像下面的示例数据这样的数据帧 我正在尝试将数据帧中的一行转换为类似于下面所需输出的字典 但是当我使用 to dict 时 我得到了索引和列值 有谁知道如何将行转换为像所需输出那样的字典 任何提示都非常感激 Sample data pri
  • 如何在 pytest 中将单元测试和集成测试分开

    根据维基百科 https en wikipedia org wiki Unit testing Description和各种articles https techbeacon com devops 6 best practices inte
  • 为什么在 Python 2.4 中使用 Unicode 数据会出现 ASCII 编码错误,而在 2.7 中却不会?

    我有一个程序 当在 Python 2 7 中运行时 会生成正确的 Unicode 输出到标准输出 当在 Python 2 4 中运行时 我得到UnicodeEncodeError ascii codec can t encode chara
  • python suds SOAP 请求中的名称空间前缀错误

    我使用 python suds 来实现客户端 并且在发送的 SOAP 标头中得到了错误的命名空间前缀 用于定义由element ref 在 wsdl 中 wsdl 正在引用数据类型 xsd 文件 请参见下文 问题出在函数上GetRecord
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • 如何解决使用 Spark 从 S3 重新分区大量数据时从内存中逐出缓存的表分区元数据的问题?

    在尝试从 S3 重新分区数据帧时 我收到一个一般错误 Caused by org apache spark SparkException Job aborted due to stage failure Task 33 in stage 1
  • Numpy 过滤器平滑零区域

    我有一个 0 及更大整数的 2D numpy 数组 其中值代表区域标签 例如 array 9 9 9 0 0 0 0 1 1 1 9 9 9 9 0 7 1 1 1 1 9 9 9 9 0 2 2 1 1 1 9 9 9 8 0 2 2 1
  • 奇怪的 MySQL Python mod_wsgi 无法连接到 'localhost' (49) 上的 MySQL 服务器问题

    StackOverflow上也有类似的问题 但我还没有发现完全相同的情况 这是在使用 MySQL 的 OS X Leopard 机器上 一些起始信息 MySQL Server version 5 1 30 Apache 2 2 13 Uni
  • Seaborn Pairplot 图例不显示颜色

    我一直在学习如何在Python中使用seaborn和pairplot 这里的一切似乎都工作正常 但由于某种原因 图例不会显示相关的颜色 我无法找到解决方案 因此如果有人有任何建议 请告诉我 x sns pairplot stats2 hue
  • 在 Pandas 中使用正则表达式的多种模式

    我是Python编程的初学者 我正在探索正则表达式 我正在尝试从 描述 列中提取一个单词 数据库名称 我无法给出多个正则表达式模式 请参阅下面的描述和代码 描述 Summary AD1 Low free DATA space in data
  • 无法在 osx-arm64 上安装 Python 3.7

    我正在尝试使用 Conda 创建一个带有 Python 3 7 的新环境 例如 conda create n qnn python 3 7 我收到以下错误 Collecting package metadata current repoda
  • 使用 NumPy 将非均匀数据从文件读取到数组中

    假设我有一个如下所示的文本文件 33 346 1223 10 23 11 23 12 23 13 23 14 23 15 23 16 24 10 24 11 24 12 24 13 24 14 24 15 24 16 25 14 25 15
  • 使用yield 进行字典理解

    作为一个人为的例子 myset set a b c d mydict item yield join item s for item in myset and list mydict gives as cs bs ds a None b N
  • 默认情况下,Keras 自定义层参数是不可训练的吗?

    我在 Keras 中构建了一个简单的自定义层 并惊讶地发现参数默认情况下未设置为可训练 我可以通过显式设置可训练属性来使其工作 我无法通过查看文档或代码来解释为什么会这样 这是应该的样子还是我做错了什么导致默认情况下参数不可训练 代码 im
  • 获取 VS Code 扩展中的当前突出显示

    我不是在谈论当前的选择 可以通过以下方式访问它vscode window activeTextEditor selection 当光标位于标识符 变量名称等内部时 它会突出显示 如以下屏幕截图所示 这个突出显示的对象叫什么 我如何访问它 搜
  • 列表值的意外更改

    这是我的课 class variable object def init self name name alias parents values table name of the variable self name 这是有问题的函数 f
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d

随机推荐