異常:
在程序開發中,如果對某些代碼的執行不確定(程序的語法完全正確)
可以增加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位時:
當密碼長度達到長度要求: