標籤:odi else write oserror 迭代 產生 通知 ice 不能
#try: except: else:
#為什麼叫容錯呢,先說說錯誤,這裡說的錯誤並不是因為馬虎或者什麼原因在指令碼中留下的bug,這個不能容掉,所謂容掉就是略過這個錯誤,要在測試時候發現並修正,需要容錯的錯誤是在指令碼執行之前無法判斷是不是會出錯的錯誤,例如:在寫爬蟲的時候,會爬到很多頁面,這些頁面我也不知道能不能開啟,有可能逾時,這時候總不能因為這個錯誤把進程停了找問題把,那麼如果有幾萬個地址,估計得用幾年時間去爬。所以這裡就用到了容錯,把這個錯誤跳過去,並把錯誤寫入一個日誌,等全部完成後,再來查看日誌,看哪些頁面報錯誤,然後單獨對這一批頁面進行處理
#以開啟檔案為例
#先建立10個檔案for i in range(10): file_name = ‘a_%d.txt‘ %i new_file = open(file_name,‘w‘) new_file.close()#然後讀取11個檔案,注意,是11個檔案,就是說有一個檔案是一定不存在的,那麼會報錯,現在我要把這個錯誤跳過,並寫入日誌#寫日誌函數一會單寫一個,名字就叫write_logfor i in range(11): file_name = ‘a_%d.txt‘ %i #open_file = open(file_name,‘r‘) 當讀到第11個檔案,就是10的時候會報錯,所以不能這樣 try: open_file = open(file_name,‘r‘) #try後面就是有可能出錯的代碼 except: write_log(‘open file fail!‘) #這個是錯誤的處理,就是出錯的話,會把open file fail!寫入日誌,這樣是可以的,但是不建議這樣,最好把這個報錯輸出,並且一起寫到日誌裡,就是下面這樣#正常寫法for i in range(11): file_name = ‘a_%d.txt‘ %i try: open_file = open(file_name,‘r‘) except IOError, e: #這個IOError是IO錯誤,就是如果是這個錯誤的話,就把報錯內容寫到e變數裡,也可以把IOError換成Exception,這樣無論出什麼錯誤,都會寫到e變數裡,不過為了明確錯誤,還是指定錯誤類型比較好 write_log(‘%s open file fail! %s‘) %(file_name,e) #將錯誤的檔案名稱和報錯內容全部寫入日誌 else: open_file.close() #雖然已經容錯,不過已經開啟的檔案還是要關閉的,但是沒有開啟,也就是10,無法關閉,所以要加到else裡面,else的功能就是正常執行了,就執行else後面的命令 #open_file.close() 這個是把關閉寫在外面,想想無論正確與否都要關閉,那麼開啟10的時候open就報錯了,也就是根本沒開啟,那何來的關閉呢
忘了一個加入一堆報錯了,這個是抄來的,百度有很多,可以參考下
| 異常名稱 |
描述 |
| BaseException |
所有異常的基類 |
| SystemExit |
解譯器請求退出 |
| KeyboardInterrupt |
使用者中斷執行(通常是輸入^C) |
| Exception |
常規錯誤的基類 |
| StopIteration |
迭代器沒有更多的值 |
| GeneratorExit |
產生器(generator)發生異常來通知退出 |
| StandardError |
所有的內建標準異常的基類 |
| ArithmeticError |
所有數值計算錯誤的基類 |
| FloatingPointError |
浮點計算錯誤 |
| OverflowError |
數值運算超出最大限制 |
| ZeroDivisionError |
除(或模數)零 (所有資料類型) |
| AssertionError |
Assert 陳述式失敗 |
| 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容錯