【问题标题】:Python crashes when plotting with matplotlib in module importing swig generated wrapper在导入 swig 生成的包装器的模块中使用 matplotlib 绘图时 Python 崩溃
【发布时间】:2010-03-17 19:12:35
【问题描述】:

我有一个 python 模块,它导入一个用 swig 生成的模块。当我稍后在该模块中尝试调用 matplotlib 的 show() 函数时,python 在没有任何提示的情况下崩溃,出了什么问题。当我用 swig 生成的模块注释 import 语句时,一切正常。 有没有人知道这种行为的原因可能是什么?我知道这是一个非常不具体的问题表述。但是,我不指望能解决我的问题,只是提示我可以在哪里找到问题。 谢谢。

【问题讨论】:

  • 会不会和命名空间污染有关?如果您切换导入的顺序(对于 swig 模块和 matplotlib),错误会改变吗?如果您至少发布导入语句,它也可能会有所帮助。

标签: python crash matplotlib swig show


【解决方案1】:

我首先在 gdb 下运行脚本并查看堆栈跟踪。最新版本的 gdb 内置了对 python 调试的支持。

$ gdb python
(gdb) run /path/to/script.py
# wait for crash #
(gdb) bt
# stack trace here #

更多information here.

【讨论】:

  • 您也可以尝试使用 python -v 以详细模式运行 Python。
【解决方案2】:

我怀疑你调用的是 figure.show 而不是 plt.show()

以下脚本崩溃:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot([25, 43, 65], [3500, 5500, 5800])

fig.show() # use plt.show() instead

这个脚本运行良好:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot([25, 43, 65], [3500, 5500, 5800])

plt.show()

【讨论】:

  • 其实并没有崩溃。它只是完成结束退出,因为 fig.show() 不会等待绘图窗口关闭。另外,我看不出这会如何受到另一个模块的存在的影响。
猜你喜欢
  • 2023-04-05
  • 2016-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-13
  • 2012-07-02
  • 1970-01-01
相关资源
最近更新 更多