我遇到了,我一直在試圖解決現在幾天蟒蛇錯誤時,底層的C/C++對象已被刪除。 我的程序會創建數字,保存並關閉它們,除了這個錯誤外,它可以正常工作。通常它不會妨礙保存過程,但有時保存時圖片會丟失較低部分。奇怪的是,這只是發生在循環到達savefig方法每一秒的時間,這裏是我的代碼:RuntimeError:保存和事後關閉pyplot數字
for num in np.arange(file_number):
plt.figure('abc' + str(num),figsize=(22,12),dpi=100)
#some plots are added to the figure
print 1
plt.savefig(os.path.join(savepath,filename),dpi=100)
print 2
plt.close()
print 3
我使用的打印命令,看看那裏的錯誤發生。這裏是Spyder的控制檯輸出:
Reading file1.file
1
2
3
Reading file2.file
1
Traceback (most recent call last):
File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_qt4.py", line 151, in <lambda>
lambda: self.close_event())
File "/usr/lib/pymodules/python2.7/matplotlib/backend_bases.py", line 1564, in close_event
self.callbacks.process(s, event)
RuntimeError: underlying C/C++ object has been deleted
2
3
Reading file3.file
1
2
3
Reading file4.file
1
Traceback (most recent call last):
File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_qt4.py", line 151, in <lambda>
lambda: self.close_event())
File "/usr/lib/pymodules/python2.7/matplotlib/backend_bases.py", line 1564, in close_event
self.callbacks.process(s, event)
RuntimeError: underlying C/C++ object has been deleted
2
3
據我瞭解,誤差在保存圖形(每秒一次)已經出現,雖然它工作正常,如果我忽略的close()命令。在這種情況下,我的RAM在大約70個文件後被填充,有時我需要評估幾百個文件。這就是爲什麼我需要包含close()命令或類似的東西。 如果你解決這個問題(或者改進我的程序,我想我這樣做的保存和關閉的方式可能會被認爲是醜陋的),請幫助我。
如果刪除了'plt.close()'會發生什麼?或者,如果使用fig.savefig(...)方法而不是pyplot函數會發生什麼情況。你是否在做其他的事情,比如添加回調等?什麼版本的matplotlib? – pelson 2012-07-26 22:05:30
當我刪除'plt.close()'時,程序沒有錯誤。然而,我的內存得到填充非常快,直到我關閉應用程序才被釋放。一旦它接近完整,程序速度減慢一個很大的因素,並且計算機上的其他應用程序幾乎不可用。 'fig.savefig(...)'不會改變任何東西。 我不太清楚你的意思是「添加回調」。 Matplotlib的版本是1.1.1rc – 2012-07-27 11:10:28