第8章 Python筆記 異常

2021-08-04 23:15:28 字數 4809 閱讀 4444

一、按照自己的方式出錯

1、raise語句

raise語句可以引發異常:

>>> raise exception

traceback (most recent call last):

file "", line 1, in raise exception

exception

>>> raise exception('hyperdrive overload')

traceback (most recent call last):

file "", line 1, in raise exception('hyperdrive overload')

exception: hyperdrive overload

可以使用dir函式列出模組的內容:

>>> import exceptions

>>> 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__']
一些重要的內建異常類:

2、自定義異常類

自定義異常類只需要繼承exception類

>>> class somecustomexception(exception):pass
二、捕捉異常捕捉異常使用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!"

三、不止乙個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!"

except typeerror:

print "that wasn't a number.was it?"

四、用乙個塊捕捉兩個異常如果需要用乙個塊捕捉多個異常,那麼可以將它們作為元祖列出:

try:

x=input('enter the first number: ')

y=input('enter the second number: ')

print x/y

except (zerodivisionerror,typeerror,nameerror):

print "your number were bogus..."

五、捕捉物件如果希望在except子句中訪問異常物件本身,可以使用兩個引數(注意,如果是捕捉到多個異常,需要向except子句提供乙個引數——元祖。第二個引數e):

try:

x=input('enter the first number: ')

y=input('enter the second number: ')

print x/y

except (zerodivisionerror,typeerror,),e:

print e

六、全捕捉如果想捕捉所有異常,可以在except子句中忽略所有的異常類:

try:

x=input('enter the first number: ')

y=input('enter the second number: ')

print x/y

except:

像上述捕捉異常是危險的,因為它會隱藏所有程式設計師為想到的並且未做好準備處理的錯誤。這時用except exception, e會更好些,或者對異常物件e進行一些檢查。

七、try/except加上else子句

try:

print 'a ****** task'

except:

print 'what? something went wrong?'

else:

print 'ah....it went as planned.'

執行結果為:

a ****** task

ah....it went as planned.

八、finally子句

x=none

try:

x=1/0

finally:

print 'cleaning up....'

del x

finally子句肯定會執行,不管try子句中是否發生異常。

還可以和else一起使用:

try:

1/0except nameerror:

print "unknown variable"

else:

print "that went well!"

finally:

print "cleaning up"

九、異常和函式如果異常在函式內引發而不處理,它就會傳播至函式呼叫的地方。如果依舊沒有被處理,就會繼續傳播,直到主程式。如果還沒有被處理,程式會帶著棧跟蹤中止。

>>> def faulty():

raise exception('something is wrong')

>>> def ignore_exception():

faulty()

>>> def handle_exception():

try:

faulty()

except:

print 'exception handled'

>>> ignore_exception()

traceback (most recent call last):

file "", line 1, in ignore_exception()

file "", line 2, in ignore_exception

faulty()

file "", line 2, in faulty

raise exception('something is wrong')

exception: something is wrong

>>> handle_exception()

exception handled

本章新函式:

Python基礎教程 第8章 異常

1.自定義異常 繼承exception 1.自定義異常類 方法 從exception類繼承 class somecustomexception exception pass2.處理異常 1 捕捉異常 try except try x input enter the first number y in...

第8章 異常控制流

8.1.1 異常處理 處理會把一些處理器的狀態壓入棧中,返回時重新恢復在這些狀態 當控制從使用者程式轉移到核心時,所有這些專案都會被壓入到核心的棧中,而不是使用者的棧 異常處理程式執行在核心的模式下,這意味著對所有的系統資源有完全的訪問許可權 8.1.2 異常的類別 異常可以為四種 中斷 inter...

第8章指標

1.指標 指標是儲存記憶體位址的變數。在記憶體中每一塊儲存單元都有相對應的唯一的位址編號,指標就是一塊儲存這種編號的空間 2.對於乙個變數可以用 符號來獲取它的位址 int a int p a 什麼樣的變數,就需要宣告對應的型別的指標。這是為了告訴系統,我從這個位址開始要讀取多少位的記憶體塊,才能正...