memoryerrorpython
㈠ 請問大神們python處理數據遇到memory error怎麼辦
items=[[0,16],[0,34],[10,15],[10,28],[20,35],[20,58],[34,13],[34,18],[34,20]]
while1:
tmps=[(a,b)forainitemsforbinitemsifa[-1]==b[0]]
ifnottmps:
break
tmps2=[(a,b)foraintmpsforbintmpsifa[-1]==b[0]]
foriintmps2:
tmps.remove(i[1])
fora,bintmps:
items.append(a+b[1:])
ifainitems:
items.remove(a)
ifbinitems:
items.remove(b)
print(items)
你的代碼沒法看, 直接給你重寫了個。
如果items的元素能用元組表示的話,通過元組和集合,能更快點。
㈡ Python中程序異常都能被處理嗎
「異常」是Python對象,表示一個錯誤。
如果不想出現異常後程序自動停止運行,編程的人,就要主動捕捉異常,並自己作出相應處理。
捕捉異常可以使用try/except語句。
try/except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常信息並處理。
下面是try/except的示例,說明了怎樣處理各種異常:
try:
<語句> #運行別的代碼
except <名字>:
<語句> #如果在try部份引發了'name'異常
except <名字>,<數據>:
<語句> #如果引發了'name'異常,獲得附加的數據
else:
<語句> #如果沒有異常發生
Python的各種標准異常是預先定義好的。基本上包括了常見的異常情況,主要有以下內容。
異常名稱 描述
BaseException 所有異常的基類
SystemExit 解釋器請求退出
KeyboardInterrupt 用戶中斷執行(通常是輸入^C)
Exception 常規錯誤的基類
StopIteration 迭代器沒有更多的值
GeneratorExit 生成器(generator)發生異常來通知退出
StandardError 所有的內建標准異常的基類
ArithmeticError 所有數值計算錯誤的基類
FloatingPointError 浮點計算錯誤
OverflowError 數值運算超出最大限制
ZeroDivisionError 除(或取模)零 (所有數據類型)
AssertionError 斷言語句失敗
AttributeError 對象沒有這個屬性
EOFError 沒有內建輸入,到達EOF 標記
EnvironmentError 操作系統錯誤的基類
IOError 輸入/輸出操作失敗
OSError 操作系統錯誤
WindowsError 系統調用失敗
ImportError 導入模塊/對象失敗
LookupError 無效數據查詢的基類
IndexError 序列中沒有此索引(index)
KeyError 映射中沒有這個鍵
MemoryError 內存溢出錯誤(對於Python 解釋器不是致命的)
NameError 未聲明/初始化對象 (沒有屬性)
UnboundLocalError 訪問未初始化的本地變數
ReferenceError 弱引用(Weak reference)試圖訪問已經垃圾回收了的對象
RuntimeError 一般的運行時錯誤
NotImplementedError 尚未實現的方法
SyntaxError Python 語法錯誤
IndentationError 縮進錯誤
TabError Tab 和空格混用
SystemError 一般的解釋器系統錯誤
TypeError 對類型無效的操作
ValueError 傳入無效的參數
UnicodeError Unicode 相關的錯誤
UnicodeDecodeError Unicode 解碼時的錯誤
UnicodeEncodeError Unicode 編碼時錯誤
UnicodeTranslateError Unicode 轉換時錯誤
Warning 警告的基類
DeprecationWarning 關於被棄用的特徵的警告
FutureWarning 關於構造將來語義會有改變的警告
OverflowWarning 舊的關於自動提升為長整型(long)的警告
PendingDeprecationWarning 關於特性將會被廢棄的警告
RuntimeWarning 可疑的運行時行為(runtime behavior)的警告
SyntaxWarning 可疑的語法的警告
UserWarning 用戶代碼生成的警告
Python系統處理異常就是提示一下,停止運行。不想停止,只有自己處理。
可以不帶類型,所有異常執行同一組語句:
try:
正常的操作
except:
發生異常,執行這塊代碼
else:
如果沒有異常執行這塊代碼
也可以多個異常共用一段代碼:
ry:
正常的操作
except(Exception1[, Exception2[,...ExceptionN]]]):
發生以上多個異常中的一個,執行這塊代碼
else:
如果沒有異常執行這塊代碼
還有一種格式,可以有finally部分:
try:
fh = open("testfile", "w")
try:
fh.write("這是一個測試文件,用於測試異常!!")
finally:
print "關閉文件"
fh.close()except IOError:
print "Error: 沒有找到文件或讀取文件失敗"
當在try塊中拋出一個異常,立即執行finally塊代碼。
finally塊中的所有語句執行後,異常被再次觸發,並執行except塊代碼。
參數的內容不同於異常。
除了標准異常,我們也可以自己定義異常,並進行處理,這時用到raise語句:
raise [Exception [, args [, traceback]]]
語句中 Exception 是異常的類型(例如,NameError)參數標准異常中任一種,args 是自已提供的異常參數。
最後一個參數是可選的(在實踐中很少使用),如果存在,是跟蹤異常對象。
相應的異常處理程序示例如下:
try:
正常語句,內含raise語句
except Exception,err:
觸發自定義異常
else:
其餘代碼
㈢ Python實現協同過濾推薦演算法,用的大一些的數據集就報錯MemoryError
python雖然易用,但是內存佔用比較多;所以如果你有C/C++/Java基礎,考慮用這些語言來實現;
CF演算法需要計算大量的相似度,如果能把中間結果存起來,或者簡化計算過程(如,你可能會重復計算一個item的均值)可以省下不少內存;(個人試過計算1w個用戶Pearson是沒問題的)
如果內存實在不夠用,那就用時間換空間,把中間計算結果分成小文件存到磁碟上,用的時候再讀取。
供參考。
㈣ python 問題求解:memoryError的問題!
其實,解決這種問題的策略無非兩種策略:
1、換用內存更大的伺服器。
2、使用更大的物理空間來犧牲性能,你可以將中間結果或者臨時結果在計算進行到一定程度的時候存儲進入臨時文件,然後在使用到相應的數據時候再取用,當然這樣非常損失性能,當年我做生物信息學方面的時候遇到這樣的問題。只能用數以千計的臨時文件進行暫時緩存。