+-- ResourceWarning
通用的異常處理:
try:
return int(time.mktime(time.strptime(datetimeString, "%Y-%m-%d %H:%M:%S")))
except Exception as e:
print('Err type:',e.__class__.__name__)
print('str(Exception):\t', str(Exception))
print('str(e):\t\t', str(e))
print('repr(e):\t', repr(e))
print('e.message:\t', e.message)
traceback.print_exc() #堆棧
附注:異常類簡要說明
一、基類:下列異常主要被用作其他異常的基類。
1、exception BaseException
所有內(nèi)置異常的基類。 它不應(yīng)該被用戶自定義類直接繼承 (這種情況請使用 Exception)。 如果在此類的實(shí)例上調(diào)用 str(),則會返回實(shí)例的參數(shù)表示,或者當(dāng)沒有參數(shù)時(shí)返回空字符串。
args 傳給異常構(gòu)造器的參數(shù)元組。 某些內(nèi)置異常 (例如 OSError) 接受特定數(shù)量的參數(shù)并賦予此元組中的元素特殊的含義,而其他異常通常只接受一個(gè)給出錯(cuò)誤信息的單獨(dú)字符串。
with_traceback(tb)將tb 設(shè)為異常的新回溯信息并返回該異常對象。 它通常以如下的形式在異常處理程序中使用:
try:
...
except SomeException:
tb = sys.exc_info()[2]
raise OtherException(...).with_traceback(tb)
2、exception Exception 所有內(nèi)置的非系統(tǒng)退出類異常都派生自此類。 所有用戶自定義異常也應(yīng)當(dāng)派生自此類。
3、exception ArithmeticError 此基類用于派生針對各種算術(shù)類錯(cuò)誤而引發(fā)的內(nèi)置異常: OverflowError, ZeroDivisionError, FloatingPointError。
4、exception BufferError 當(dāng)與緩沖區(qū)相關(guān)的操作無法執(zhí)行時(shí)將被引發(fā)。
5、exception LookupError 此基類用于派生當(dāng)映射或序列所使用的鍵或索引無效時(shí)引發(fā)的異常: IndexError, KeyError。 這可以通過 codecs.lookup() 來直接引發(fā)。
二、具體異常 以下異常屬于經(jīng)常被引發(fā)的異常。
1、exception AssertionError assert 語句失敗時(shí)將被引發(fā)。
2、exception AttributeError 當(dāng)屬性引用 (參見 屬性引用) 或賦值失敗時(shí)將被引發(fā)。 (當(dāng)一個(gè)對象根本不支持屬性引用或?qū)傩再x值時(shí)則將引發(fā) TypeError。)
3、exception EOFError 當(dāng)input() 函數(shù)未讀取任何數(shù)據(jù)即達(dá)到文件結(jié)束條件 (EOF) 時(shí)將被引發(fā)。 (另外,io.IOBase.read() 和 io.IOBase.readline() 方法在遇到 EOF 則將返回一個(gè)空字符串。)
4、exception GeneratorExit 當(dāng)一個(gè) generator 或 coroutine 被關(guān)閉時(shí)將被引發(fā);參見 generator.close() 和 coroutine.close()。 它直接繼承自 BaseException 而不是 Exception,因?yàn)閺募夹g(shù)上來說它并不是一個(gè)錯(cuò)誤。
5、exception ImportError 當(dāng) import 語句嘗試加載模塊遇到麻煩時(shí)將被引發(fā)。 并且當(dāng) from ... import 中的 "from list" 存在無法找到的名稱時(shí)也會被引發(fā)。name 與 path 屬性可通過對構(gòu)造器使用僅關(guān)鍵字參數(shù)來設(shè)定。 設(shè)定后它們將分別表示被嘗試導(dǎo)入的模塊名稱與觸發(fā)異常的任意文件所在路徑。
6、exception ModuleNotFoundError ImportError 的子類,當(dāng)一個(gè)模塊無法被定位時(shí)將由 import 引發(fā)。 當(dāng)在 sys.modules 中找到 None 時(shí)也會被引發(fā)。
7、exception IndexError 當(dāng)序列抽取超出范圍時(shí)將被引發(fā)。 (切片索引會被靜默截短到允許的范圍;如果指定索引不是整數(shù)則 TypeError 會被引發(fā)。)
8、exception KeyError 當(dāng)在現(xiàn)有鍵集合中找不到指定的映射(字典)鍵時(shí)將被引發(fā)。
9、exception KeyboardInterrupt 當(dāng)用戶按下中斷鍵 (通常為 Control-C 或 Delete) 時(shí)將被引發(fā)。 在執(zhí)行期間,會定期檢測中斷信號。 該異常繼承自 BaseException 以確保不會被處理 Exception 的代碼意外捕獲,這樣可以避免退出解釋器。
10、exception MemoryError 當(dāng)一個(gè)操作耗盡內(nèi)存但情況仍可(通過刪除一些對象)進(jìn)行挽救時(shí)將被引發(fā)。 關(guān)聯(lián)的值是一個(gè)字符串,指明是哪種(內(nèi)部)操作耗盡了內(nèi)存。
請注意由于底層的內(nèi)存管理架構(gòu)(C 的 malloc() 函數(shù)),解釋器也許并不總是能夠從這種情況下完全恢復(fù);但它畢竟可以引發(fā)一個(gè)異常,這樣就能打印出?;厮菪畔ⅲ员阏页鰧?dǎo)致問題的失控程序。
11、exception NameError 當(dāng)某個(gè)局部或全局名稱未找到時(shí)將被引發(fā)。 此異常僅用于非限定名稱。 關(guān)聯(lián)的值是一條錯(cuò)誤信息,其中包含未找到的名稱。
12、exception NotImplementedError 此異常派生自 RuntimeError。 在用戶自定義的基類中,抽象方法應(yīng)當(dāng)在其要求所派生類重載該方法,或是在其要求所開發(fā)的類提示具體實(shí)現(xiàn)尚待添加時(shí)引發(fā)此異常。
注解 它不應(yīng)當(dāng)用來表示一個(gè)運(yùn)算符或方法根本不能被支持 -- 在此情況下應(yīng)當(dāng)讓特定運(yùn)算符 / 方法保持未定義,或者在子類中將其設(shè)為 None。
注解 NotImplementedError 和 NotImplemented 不可互換,即使它們有相似的名稱和用途。 請參閱 NotImplemented 了解有關(guān)何時(shí)使用它們的詳細(xì)說明。
13、exception OSError([arg])
exception OSError(errno, strerror[, filename[, winerror[, filename2]]])
此異常在一個(gè)系統(tǒng)函數(shù)返回系統(tǒng)相關(guān)的錯(cuò)誤時(shí)將被引發(fā),此類錯(cuò)誤包括 I/O 操作失敗例如 "文件未找到" 或 "磁盤已滿" 等(不包括非法參數(shù)類型或其他偶然性錯(cuò)誤)。
構(gòu)造器的第二種形式可設(shè)置如下所述的相應(yīng)屬性。 如果未指定這些屬性則默認(rèn)為 None。 為了能向下兼容,如果傳入了三個(gè)參數(shù),則 args 屬性將僅包含由前兩個(gè)構(gòu)造器參數(shù)組成的 2 元組。
構(gòu)造器實(shí)際返回的往往是 OSError 的某個(gè)子類,如下文 OS exceptions 中所描述的。 具體的子類取決于最終的 errno 值。 此行為僅在直接或通過別名來構(gòu)造 OSError 時(shí)發(fā)生,并且在子類化時(shí)不會被繼承。
errno來自于 C 變量 errno 的數(shù)字錯(cuò)誤碼。
winerror 在 Windows 下,此參數(shù)將給出原生的 Windows 錯(cuò)誤碼。 而 errno 屬性將是該原生錯(cuò)誤碼在 POSIX 平臺下的近似轉(zhuǎn)換形式。
在 Windows 下,如果 winerror 構(gòu)造器參數(shù)是一個(gè)整數(shù),則 errno 屬性會根據(jù) Windows 錯(cuò)誤碼來確定,而 errno 參數(shù)會被忽略。 在其他平臺上,winerror 參數(shù)會被忽略,并且 winerror 屬性將不存在。
strerror 操作系統(tǒng)所提供的相應(yīng)錯(cuò)誤信息。 它在 POSIX 平臺中由 C 函數(shù) perror() 來格式化,在 Windows 中則是由 FormatMessage()。
filename filename2 :對于與文件系統(tǒng)路徑有關(guān) (例如 open() 或 os.unlink()) 的異常,filename 是傳給函數(shù)的文件名。 對于涉及兩個(gè)文件系統(tǒng)路徑的函數(shù) (例如 os.rename()),filename2 將是傳給函數(shù)的第二個(gè)文件名。
EnvironmentError, IOError, WindowsError, socket.error, select.error 與 mmap.error 已被合并到 OSError,構(gòu)造器可能返回其中一個(gè)子類。
filename 屬性現(xiàn)在將是傳給函數(shù)的原始文件名,而不是經(jīng)過編碼或基于文件系統(tǒng)編碼進(jìn)行解碼之后的名稱。 此外還添加了 filename2 構(gòu)造器參數(shù)和屬性。
14、exception OverflowError
當(dāng)算術(shù)運(yùn)算的結(jié)果大到無法表示時(shí)將被引發(fā)。 這對整數(shù)來說不可能發(fā)生(寧可引發(fā) MemoryError 也不會放棄嘗試)。 但是出于歷史原因,有時(shí)也會在整數(shù)超出要求范圍的情況下引發(fā) OverflowError。 因?yàn)樵?C 中缺少對浮點(diǎn)異常處理的標(biāo)準(zhǔn)化,大多數(shù)浮點(diǎn)運(yùn)算都不會做檢查。
15、exception RecursionError:此異常派生自 RuntimeError。 它會在解釋器檢測發(fā)現(xiàn)超過最大遞歸深度 (參見 sys.getrecursionlimit()) 時(shí)被引發(fā)。
16、exception ReferenceError:此異常將在使用 weakref.proxy() 函數(shù)所創(chuàng)建的弱引用來訪問該引用的某個(gè)已被作為垃圾回收的屬性時(shí)被引發(fā)。 有關(guān)弱引用的更多信息請參閱 weakref 模塊。
17、exception RuntimeError:當(dāng)檢測到一個(gè)不歸屬于任何其他類別的錯(cuò)誤時(shí)將被引發(fā)。 關(guān)聯(lián)的值是一個(gè)指明究竟發(fā)生了什么問題的字符串。
18、exception StopIteration
由內(nèi)置函數(shù) next() 和 iterator 的 __next__() 方法所引發(fā),用來表示該迭代器不能產(chǎn)生下一項(xiàng)。
該異常對象只有一個(gè)屬性 value,它在構(gòu)造該異常時(shí)作為參數(shù)給出,默認(rèn)值為 None。
當(dāng)一個(gè) generator 或 coroutine 函數(shù)返回時(shí),將引發(fā)一個(gè)新的 StopIteration 實(shí)例,函數(shù)返回的值將被用作異常構(gòu)造器的 value 形參。
如果某個(gè)生成器代碼直接或間接地引發(fā)了 StopIteration,它會被轉(zhuǎn)換為 RuntimeError (并將 StopIteration 保留為導(dǎo)致新異常的原因)。
19、exception StopAsyncIteration:必須由一個(gè) asynchronous iterator 對象的 __anext__() 方法來引發(fā)以停止迭代操作。
20、exception SyntaxError
當(dāng)解析器遇到語法錯(cuò)誤時(shí)將被引發(fā)。 這可以發(fā)生在 import 語句,對內(nèi)置函數(shù) exec() 或 eval() 的調(diào)用,或者讀取原始腳本或標(biāo)準(zhǔn)輸入(也包括交互模式)的時(shí)候。
該類的實(shí)例包含有屬性 filename, lineno, offset 和 text 用于方便地訪問相應(yīng)的詳細(xì)信息。 異常實(shí)例的 str() 僅返回消息文本。
21、exception IndentationError:與不正確的縮進(jìn)相關(guān)的語法錯(cuò)誤的基類。 這是 SyntaxError 的一個(gè)子類。
22、exception TabError:當(dāng)縮進(jìn)包含對制表符和空格符不一致的使用時(shí)將被引發(fā)。 這是 IndentationError 的一個(gè)子類。
23、exception SystemError:當(dāng)解釋器發(fā)現(xiàn)內(nèi)部錯(cuò)誤,但情況看起來尚未嚴(yán)重到要放棄所有希望時(shí)將被引發(fā)。 關(guān)聯(lián)的值是一個(gè)指明發(fā)生了什么問題的字符串(表示為低層級的符號)。
24、exception SystemExit
此異常由 sys.exit() 函數(shù)引發(fā)。 它繼承自 BaseException 而不是 Exception 以確保不會被處理 Exception 的代碼意外捕獲。
這允許此異常正確地向上傳播并導(dǎo)致解釋器退出。 如果它未被處理,則 Python 解釋器就將退出;不會打印任何?;厮菪畔ⅰ?/div>
構(gòu)造器接受的可選參數(shù)與傳遞給 sys.exit() 的相同。 如果該值為一個(gè)整數(shù),則它指明系統(tǒng)退出狀態(tài)碼(會傳遞給 C 的 exit() 函數(shù));如果該值為 None,則退出狀態(tài)碼為零;如果該值為其他類型(例如字符串),則會打印對象的值并將退出狀態(tài)碼設(shè)為一。
對 sys.exit() 的調(diào)用會被轉(zhuǎn)換為一個(gè)異常以便能執(zhí)行清理處理程序 (try 語句的 finally 子句),并且使得調(diào)試器可以執(zhí)行一段腳本而不必冒失去控制的風(fēng)險(xiǎn)。 如果絕對確實(shí)地需要立即退出(例如在調(diào)用 os.fork() 之后的子進(jìn)程中)則可使用 os._exit().
code 傳給構(gòu)造器的退出狀態(tài)碼或錯(cuò)誤信息(默認(rèn)為 None。)
25、exception TypeError
當(dāng)一個(gè)操作或函數(shù)被應(yīng)用于類型不適當(dāng)?shù)膶ο髸r(shí)將被引發(fā)。 關(guān)聯(lián)的值是一個(gè)字符串,給出有關(guān)類型不匹配的詳情。
此異??梢杂捎脩舸a引發(fā),以表明嘗試對某個(gè)對象進(jìn)行的操作不受支持也不應(yīng)當(dāng)受支持。 如果某個(gè)對象應(yīng)當(dāng)支持給定的操作但尚未提供相應(yīng)的實(shí)現(xiàn),所要引發(fā)的適當(dāng)異常應(yīng)為 NotImplementedError。
傳入?yún)?shù)的類型錯(cuò)誤 (例如在要求 int 時(shí)卻傳入了 list) 應(yīng)當(dāng)導(dǎo)致 TypeError,但傳入?yún)?shù)的值錯(cuò)誤 (例如傳入要求范圍之外的數(shù)值) 則應(yīng)當(dāng)導(dǎo)致 ValueError。
26、exception UnboundLocalError:當(dāng)在函數(shù)或方法中對某個(gè)局部變量進(jìn)行引用,但該變量并未綁定任何值時(shí)將被引發(fā)。 此異常是 NameError 的一個(gè)子類。
27、exception UnicodeError:當(dāng)發(fā)生與 Unicode 相關(guān)的編碼或解碼錯(cuò)誤時(shí)將被引發(fā)。 此異常是 ValueError 的一個(gè)子類。
28、UnicodeError 具有一些描述編碼或解碼錯(cuò)誤的屬性。 例如 err.object[err.start:err.end] 會給出導(dǎo)致編解碼器失敗的特定無效輸入。
encoding 引發(fā)錯(cuò)誤的編碼名稱。
reason 描述特定編解碼器錯(cuò)誤的字符串。
object 編解碼器試圖要編碼或解碼的對象。
start object 中無效數(shù)據(jù)的開始位置索引。
end object 中無效數(shù)據(jù)的末尾位置索引(不含)。
29、exception UnicodeEncodeError:當(dāng)在編碼過程中發(fā)生與 Unicode 相關(guān)的錯(cuò)誤時(shí)將被引發(fā)。 此異常是 UnicodeError 的一個(gè)子類。
30、exception UnicodeDecodeError:當(dāng)在解碼過程中發(fā)生與 Unicode 相關(guān)的錯(cuò)誤時(shí)將被引發(fā)。 此異常是 UnicodeError 的一個(gè)子類。
31、exception UnicodeTranslateError:在轉(zhuǎn)寫過程中發(fā)生與 Unicode 相關(guān)的錯(cuò)誤時(shí)將被引發(fā)。 此異常是 UnicodeError 的一個(gè)子類。
32、exception ValueError:當(dāng)操作或函數(shù)接收到具有正確類型但值不適合的參數(shù),并且情況不能用更精確的異常例如 IndexError 來描述時(shí)將被引發(fā)。
33、exception ZeroDivisionError:當(dāng)除法或取余運(yùn)算的第二個(gè)參數(shù)為零時(shí)將被引發(fā)。 關(guān)聯(lián)的值是一個(gè)字符串,指明操作數(shù)和運(yùn)算的類型。
下列異常被保留以與之前的版本相兼容;都是 OSError 的別名。
exception EnvironmentError
exception IOError
exception WindowsError
限在 Windows 中可用。
三、OS 異常:OSError 的子類,它們將根據(jù)系統(tǒng)錯(cuò)誤代碼被引發(fā)。
1、exception BlockingIOError:當(dāng)一個(gè)操作會被某個(gè)設(shè)置為非阻塞操作的對象(例如套接字)所阻塞時(shí)將被引發(fā)。 對應(yīng)于 errno EAGAIN, EALREADY, EWOULDBLOCK 和 EINPROGRESS。
除了 OSError 已有的屬性,BlockingIOError 還有一個(gè)額外屬性:
characters_written 一個(gè)整數(shù),表示在被阻塞前已寫入到流的字符數(shù)。 當(dāng)使用來自 io 模塊的帶緩沖 I/O 類時(shí)此屬性可用。
2、exception ChildProcessError:當(dāng)一個(gè)子進(jìn)程上的操作失敗時(shí)將被引發(fā)。 對應(yīng)于 errno ECHILD。
3、exception ConnectionError:與連接相關(guān)問題的基類。子類有BrokenPipeError, ConnectionAbortedError, ConnectionRefusedError 和 ConnectionResetError。
4、exception BrokenPipeError:ConnectionError 的子類,當(dāng)試圖寫入另一端已被關(guān)閉的管道,或是試圖寫入已關(guān)閉寫入的套接字時(shí)將被引發(fā)。 對應(yīng)于 errno EPIPE 和 ESHUTDOWN。
5、exception ConnectionAbortedError:ConnectionError 的子類,當(dāng)連接嘗試被對端中止時(shí)將被引發(fā)。 對應(yīng)于 errno ECONNABORTED。
6、exception ConnectionRefusedError:ConnectionError 的子類,當(dāng)連接嘗試被對端拒絕時(shí)將被引發(fā)。 對應(yīng)于 errno ECONNREFUSED。
7、exception ConnectionResetError:ConnectionError 的子類,當(dāng)連接被對端重置時(shí)將被引發(fā)。 對應(yīng)于 errno ECONNRESET。
8、exception FileExistsError:當(dāng)試圖創(chuàng)建一個(gè)已存在的文件或目錄時(shí)將被引發(fā)。 對應(yīng)于 errno EEXIST。
9、exception FileNotFoundError:當(dāng)所請求的文件或目錄不存在時(shí)將被引發(fā)。 對應(yīng)于 errno ENOENT。
10、exception InterruptedError:當(dāng)系統(tǒng)調(diào)用被輸入信號中斷時(shí)將被引發(fā)。 對應(yīng)于 errno EINTR。
當(dāng)系統(tǒng)調(diào)用被某個(gè)信號中斷時(shí),Python 現(xiàn)在會重試系統(tǒng)調(diào)用,除非該信號的處理程序引發(fā)了其它異常 (原理參見 PEP 475) 而不是引發(fā) InterruptedError。
11、exception IsADirectoryError:當(dāng)請求對一個(gè)目錄執(zhí)行文件操作 (例如 os.remove()) 將被引發(fā)。 對應(yīng)于 errno EISDIR。
12、exception NotADirectoryError:當(dāng)請求對一個(gè)非目錄對象執(zhí)行目錄操作 (例如 os.listdir()) 時(shí)將被引發(fā)。 對應(yīng)于 errno ENOTDIR。
13、exception PermissionError:當(dāng)在沒有足夠操作權(quán)限的情況下試圖執(zhí)行某個(gè)操作時(shí)將被引發(fā) —— 例如缺少文件系統(tǒng)權(quán)限。 對應(yīng)于 errno EACCES 和 EPERM。
14、exception ProcessLookupError:當(dāng)給定的進(jìn)程不存在時(shí)將被引發(fā)。 對應(yīng)于 errno ESRCH。
15、exception TimeoutError:當(dāng)一個(gè)系統(tǒng)函數(shù)發(fā)生系統(tǒng)級超時(shí)的情況下將被引發(fā)。 對應(yīng)于 errno ETIMEDOUT。
四、警告:下列異常被用作警告類別
1、exception Warning :警告類別的基類。
2、exception UserWarning:用戶代碼所產(chǎn)生警告的基類。
3、exception DeprecationWarning:如果所發(fā)出的警告是針對其他 Python 開發(fā)者的,則以此作為與已棄用特性相關(guān)警告的基類。
4、exception PendingDeprecationWarning:這個(gè)類很少被使用,因?yàn)獒槍ξ磥砜赡艿臈売冒l(fā)出警告的做法并不常見,而針對當(dāng)前已有的棄用則推薦使用 DeprecationWarning。
5、exception SyntaxWarning:與模糊的語法相關(guān)的警告的基類。
6、exception RuntimeWarning:與模糊的運(yùn)行時(shí)行為相關(guān)的警告的基類。
7、exception FutureWarning:如果所發(fā)出的警告是針對以 Python 所編寫應(yīng)用的最終用戶的,則以此作為與已棄用特性相關(guān)警告的基類。
8、exception ImportWarning:與在模塊導(dǎo)入中可能的錯(cuò)誤相關(guān)的警告的基類。
9、exception UnicodeWarning:與 Unicode 相關(guān)的警告的基類。
10、exception BytesWarning:與 bytes 和 bytearray 相關(guān)的警告的基類。
11、exception ResourceWarning:與資源使用相關(guān)的警告的基類。 會被默認(rèn)的警告過濾器忽略。