異常處理 python

2021-08-21 17:38:11 字數 4308 閱讀 2579

python中錯誤處理分為兩類:語法錯誤和異常處理。

語法錯誤:

語法錯誤一般是指由於python語句、表示式、函式等存在書寫格式活語法規則上的錯誤丟擲的異常,如python常見的縮排控制,若同層次的執行語句存在縮排不同,會報語法錯誤(syntaxerror),一般在ide中會有明顯的提示,其屬於編譯階段的錯誤,一般是導致解析錯誤丟擲錯誤;

>>>while

true

print

'hello world'

syntaxerror: invalid syntax

異常處理:

異常處理一般是指python語法格式正確,但在執行過程出現錯誤,錯誤型別交由python中的內建異常進行說明,回朔處理,這種型別的處理一般都是出現在執行階段,是需要處理的。

in [1]: 1/0

zerodivisionerror: integer division or modulo by zero

in [2]: vin *3

nameerror: name 'vin' is

not defined

in [3]: '1'+1

typeerror: cannot concatenate 'str' and

'int' objects

1.捕捉異常

可以使用try/except語句。

try/except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常資訊並處理。

當使用者輸入異常時,except可以保證程式可以正常執行。

in [4]: while true:

...: try:

...: x = int (raw_input("please input a number: "))

...: break

...: except valueerror:

...: print "try again please.. the number is unvalid"

...:

please input a number: as

try again please.. the number is unvalid

please input a number: 12

乙個try宣告可以對應多個except子句,乙個except字句可以用元組的形式包含多個異常型別。

... except (runtimeerror, typeerror, nameerror):

... pass

捕獲未知錯誤:

在開發的時候,要判斷所有可能出現的錯誤,是有一定難度的

如果希望程式無論出現任何錯誤,都不會因python直譯器丟擲異常而終止,可以再增加乙個except

... expect:          

... pass

try :

n = int(raw_input("input a number:"))

result = 21 / n

print result

except exception

as result: ##捕獲未知異常;result:任意乙個變數名

print

"error %s" % result

else: ##無異常時才會執行的**

print

"success!"

finally: ##無論**是否異常,均會輸出。

print

'nnmm' *34

input a

number:sa

error invalid literal for int() with base 10: 'sa'

input a

number:0

error integer division or modulo by

zero

2.丟擲異常

異常丟擲可以讓我們定義主動丟擲異常的邏輯,以提醒使用者需要進行某些必要的異常判斷或者處理,python中的異常丟擲使用關鍵字raise實現。

try:

f = open('a.txt')

s = f.readline()

i = int(s.strip())

except ioerror as e:

print

"i/o error(): ".format(e.errno, e.strerror)

except valueerror:

print

"could not convert data to an integer."

except:

print

"unexpected error:", sys.exc_info()[0]

raise

##丟擲處理錯誤資訊檔案

##還可以將異常例項化,並且自定義新增一些屬性

try:

raise exception('spam', 'eggs')

except exception

as inst:

print type(inst) # the exception instance

print inst.args # arguments stored in .args

print inst # __str__ allows args to be printed directly

x, y = inst.args

print

'x =', x

print

'y =', y

'exceptions.exception'>

('spam', 'eggs')

('spam', 'eggs')

x = spam

y = eggs

3.異常傳遞性

異常的傳遞–當函式/方法執行出現異常,會將異常傳遞給函式/方法呼叫的一方。如果傳遞到主程式,依舊沒有異常處理,程式才會終止,可以在主程式中增加異常捕獲,而在主函式中呼叫其他函式,只要出現異常,都會傳遞到主函式的異常捕獲中,這就不需要在**中,增加大量的異常捕獲,能夠保證**的整潔。

def

demo

():return int(raw_input("input number:"))

defdemo2

():return demo()

try:

print demo()

except exception as result:

print

"error: %s " % result

>>>input number:12a

error: invalid literal for int() with base 10: '12a'

4.自定義異常
def

paswswd

():##密碼輸入位數不小於8,否則輸出異常

pwd = raw_input("passwd:")

if len(pwd) >=8:

return pwd

ex = exception('passwd is too short!!') ### 建立異常物件(可以新增錯誤資訊)

raise ex

# 注意:只丟擲異常而不捕獲異常,**會錯出

try:

print paswswd()

except exception as result:

print result

# 先建立異常物件,再丟擲異常,再在主函式中捕獲異常

>>>passwd:111

passwd is too short!!

斷言

可以理解為提前預言,讓人更好的知道錯誤原因

def

func

(num,div):

assert (div != 0),'div不能為0'

##在執行程式內部,用assert對可能發生的錯誤進行預判。

return num / div

print func(10,0)

>>>assertionerror: div不能為0

python異常處理 Python 異常處理

使用者輸入不完整 比如輸入為空 或者輸入非法 輸入不是數字 異常就是程式執行時發生錯誤的訊號,在python中,錯誤觸發的異常如下 在python中不同的異常可以用不同的型別 python中統一了類與型別,型別即類 去標識,不同的類物件標識不同的異常,乙個異常標識一種錯 觸發indexerror 觸...

python異常舉例 Python異常處理

1.1異常問題舉例 例一 i input 請輸入數字 請輸入數字 0 print i print 5 int i traceback most recent call last file line 1,in zerodivisionerror division by zero 上述 的報錯是除零的錯...

python異常處理

當你的程式中出現異常情況時就需要異常處理。比如當你開啟乙個不存在的檔案時。當你的程式中有一些無效的語句時,python會提示你有錯誤存在。下面是乙個拼寫錯誤的例子,print寫成了print。python是大小寫敏感的,因此python將引發乙個錯誤 print hello world file l...