python中的面向過程中的異常處理

異常:

在程序開發中,如果對某些代碼的執行不確定(程序的語法完全正確)
可以增加try來捕獲異常
try:
嘗試執行的代碼
expect:
出現錯誤的處理

try:
    num = int(raw_input('請輸入一個整數: '))
except:
    print '請輸入正確的整數'
# 無論輸入是否錯誤,程序都會正常執行
print '*' * 50

當python解釋器拋出異常時,最後一行錯誤信息的第一個單詞,就是錯誤類型

num = int(raw_input('請輸入一個整數:'))
result = 10 / num
print '結果爲 %d' %result

# 1.輸入的不是數字
# 2.0不能做被除數
print '程序執行完畢'

1.輸入的不是數字

2.0不能做被除數

  • 捕獲能夠預測到的異常
    在程序開發中,如果對某些代碼的執行不確定(程序的語法完全正確)
    可以增加try來捕獲異常
    try:
    嘗試執行的代碼
    expect:
    出現錯誤的處理

try:
    num = int(raw_input('請輸入一個整數:'))
    result = 10 / num
    print '結果爲 %d' %result
except ZeroDivisionError:
    print '0不能做除數'
except ValueError:
    print '請輸入正確的整數'
# 1.輸入的不是數字
# 2.0不能做被除數
print '程序執行完畢'

當用戶輸入錯誤信息不是數字時:

當用戶輸入0時:

  • 捕獲未知錯誤:
    在開發的時候,要判斷所有可能出現的錯誤,是有一定難度的
    需要面面俱到,如果希望程序無論出現任何錯誤,都不會因python解釋器拋出異常而終止
    可以再增加expect Expection as 輸出結果
    print ‘%s ’ %輸出結果 # 可以看到錯誤原因

try:
    num = int(raw_input('請輸入一個整數:'))
    result = 10 / num
    print '結果爲 %d' %result
# except ZeroDivisionError:
#   print '0不能做除數'
except ValueError:
    print '請輸入正確的整數'
# 捕獲未知異常
# result:一個變量名,可以隨意起名
except Exception as result:
    print '未知錯誤 %s' %result

有時候我們並不能面面俱到,考慮所有的出錯結果,比如上一程序中用戶輸入的被除數,要求爲整數,我們只考慮到不是整數就行,但是卻忽略了一點,0雖然爲整數,但不能作被除數,當系統識別到用戶輸入的0時,也會中斷程序,因此我們用Exception 來表示未知異常。

try:
    num = int(raw_input('請輸入一個整數:'))
    result = 10 / num
    print '結果爲 %d' %result
# except ZeroDivisionError:
#   print '0不能做除數'
except ValueError:
    print '請輸入正確的整數'
# 捕獲未知異常
# result:一個變量名,可以隨意起名
except Exception as result:
    print '未知錯誤 %s' %result

  • try 中也有else finally的使用

try:
嘗試執行的代碼
expect:錯誤類型1
pass
expect:錯誤類型2
pass
expect:錯誤類型3
pass
expect Exception as result
pass
else:
#沒有異常纔會執行的代碼
finally:
# 無論是否有異常,都會執行的代碼
pass

try:
    num = int(raw_input('請輸入一個整數:'))
    result = 10 / num
    print '結果爲 %d' % result
# except ZeroDivisionError:
#   print '0不能做除數'
except ValueError:
    print '請輸入正確的整數'
# 捕獲未知異常
# result:一個變量名,可以隨意起名
except Exception as result:
    print '未知錯誤 %s' % result
# 只有在程序沒有出現異常錯誤纔會執行的代碼
else:
    print '嘗試成功'
# 無論程序是否程序是否出現異常,都會執行的代碼
finally:
    print '*********'

讓我們來看看他們的效果吧!!
當輸入正確的信息時:

當輸入錯誤的信息時:

異常的傳遞

異常的傳遞–當函數/方法執行出現異常,會將異常傳遞給函數/
方法調用的一方
如果傳遞到主程序,依然沒有異常處理,程序纔會終止,
可以在主程序中增加異常捕獲,而在主函數中調用其他函數,只要出現異常,
都會傳遞到主函數的異常捕獲中,這不需要在代碼中,增加大量的異常捕獲,
能夠保證代碼的整潔

def demo1():
    return int(raw_input('請輸入一個整數: '))


def demo2():
    return demo1()
# 利用異常的傳遞性,在主程序中捕獲異常
try:
    print demo2()
except Exception as result:
    print '未知錯誤 %s' %result


判斷用戶輸入的密碼
1. 長度<8 錯誤
2. >=8 返回輸入的密碼

def input_passwd():
    # 1.提示用戶輸入密碼
    passwd = raw_input('請輸入您的密碼: ')
    result = len(passwd)
    # 2.判斷密碼長度
    if result >= 8:
        return passwd
    # 3.<8時,主動拋出異常
    print '主動拋出異常'
    # 1.創建異常對象(可以添加錯誤信息)
    ex = Exception('密碼長度不夠')
    raise ex
# 只拋出異常,不捕獲異常,代碼會出錯

try:
    print input_passwd()
except Exception as result:
    print result


當密碼長度不夠8位時:

當密碼長度達到長度要求:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章