Python學習筆記 第八章 異常

2021-09-27 11:01:31 字數 3235 閱讀 9900

python用異常物件來表示異常情況,遇到錯誤後會引發異常。如果異常物件未被處理或捕捉,程式就會用所謂的回溯終止執行

使用乙個類(exception及其子類)或者類例項呼叫raise語句可以引發異常。

python內建異常可以在exceptions模組中找到,可以使用dir列出模組內容

>>> dir(exceptions)

['arithmeticerror', 'assertionerror', 'attributeerror', 'baseexception', 'buffererror', 'byteswarning', 'deprecationwarning', 'eoferror', 'environmenterror', 'exception', 'floatingpointerror', 'futurewarning', 'generatorexit', 'ioerror', 'importerror', 'importwarning', 'indentationerror', 'indexerror', 'keyerror', 'keyboardinterrupt', 'lookuperror', 'memoryerror', 'nameerror', 'notimplementederror', 'oserror', 'overflowerror', 'pendingdeprecationwarning', 'referenceerror', 'runtimeerror', 'runtimewarning', 'standarderror', 'stopiteration', 'syntaxerror', 'syntaxwarning', 'systemerror', 'systemexit', 'taberror', 'typeerror', 'unboundlocalerror', 'unicodedecodeerror', 'unicodeencodeerror', 'unicodeerror', 'unicodetranslateerror', 'unicodewarning', 'userwarning', 'valueerror', 'warning', 'windowserror', 'zerodivisionerror', '__doc__', '__name__', '__package__']

自定義異常類只需確保直接或間接從exception類繼承即可

可以用try/except語句來實現捕捉異常

>>> try:

x = input('enter the first number')

y = input('enter the second number')

print x / y

except zerodivisionerror:

print "the second number can't be zero!"

enter the first number 10

enter the second number 0

the second number can't be zero!

如果想要捕獲多個異常,多個異常可以以元祖的新式作為except的第乙個引數

>>> try:

x = input('enter the first number')

y = input('enter the second number')

print x / y

except (zerodivisionerror, typeerror, nameerror):

print "number illegal"

enter the first number 10

enter the second number 'a'

number illegal

可以有多個except字句,except可以有第二個引數,即:e

>>> try:

x = input('enter the first number')

y = input('enter the second number')

print x / y

except zerodivisionerror, e:

print 'exception one!'

print e

except typeerror, e:

print 'exception two'

print e

enter the first number 10

enter the second number 'a'

exception two

unsupported operand type(s) for /: 'int' and 'str'

python3.0中,except字句會被寫作except(zerodivisionerror, typeerror)as e

如果想用一段**捕捉所有異常,可以在字句中忽略所有異常類,但不提倡

有些情況下,沒有發生異常時應該執行一段**,可以像條件、迴圈語句那樣,給try/except語句加else字句來實現。

百分百捕捉異常時不可能的因為try/except語句中的**可能會出問題,比如使用舊風格的字串異常或者自定義的異常類不是exception子類

最後是finally字句,可以在可能的異常後進行清理,python2.5之前,乙個try語句中不能同時使用except和finally子句,但是乙個子句可以放置在另乙個子句裡面,python2.5及以後的版本中,可以盡情地組合這些子句。

>>> try:

10/0

except nameerror:

print "unknown variable"

except zerodivisionerror:

print "divisor can't be zerro"

else:

print 'went well'

finally:

print 'clean up.'

divisor can't be zerro

clean up.

在很多情況下,使用try/except語句比使用if/else會更自然(更python化),應該盡可能培養使用try/except的習慣。

try/except語句在python中的表現可以用海軍少將crace hopper的妙語解釋:「請求寬恕易於請求許可」,即在做一件事情的時候去處理可能的錯誤,而不是在做事情之前進行大量的排查,這個策略可以總結為習語「看前就跳」

第八章 異常

python用異常物件 exception object 表示異常情況。遇到錯誤後,會引發異常。如果異常物件未被處理或捕捉,程式就會用回溯 traceback,一種錯誤資訊 終止執行。每個異常都是一些類的例項 使用乙個類 exception的子類 或例項引數呼叫raise 捕捉異常並且進行處理,而不...

第八章(筆記)

能在 中進行記憶體單元的定址的暫存器只有4個,分別是bx si di bp 其中bx bp 是基址,bx對應的段位址是ds,bp對應的段位址是ss si di 是變址,單獨使用時段位址是ds,組合使用段位址是跟隨組合的基址對應的段位址 中進行記憶體單元定址彙總 si di bx bp 常量 si 常...

第八章 指標 第八章 指標

1 什麼是位址 include using namespace std int main 11 在堆中建立對像 我們既然可以在堆中儲存變數,那麼也就可以儲存對像,我們可以將對像儲存堆中,然後通過指標來訪問它 include using namespace std class human 14 在建構...