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 函数触发不需要的输出 的相关文章

  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 如何在 OS X 上使用 OpenSSL 1.0.1 编译 PHP 5.5.19

    我已经安装了 OpenSSL 1 0 1j usr local ssl现在我尝试使用此版本的 OpenSSL 编译 PHP 5 5 19 这是我的配置过程 export CFLAGS arch x86 64 export CXXFLAGS
  • 将 github 上的包安装到 Spyder 中

    我一直在尝试安装并导入mpl finance来自 github 的包 在我的 Spyder 环境中没有成功 我努力了 pip install e git https github com matplotlib mpl finance git
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • Python:字符串不会转换为浮点数[重复]

    这个问题在这里已经有答案了 我几个小时前写了这个程序 while True print What would you like me to double line raw input gt if line done break else f
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例

随机推荐