華為公開“仿冒 App 識別方法及裝置”專利,避免為其提供服務
異常處理
錯誤
-語法錯誤
-邏輯錯誤
異常
異常就是程式執行錯誤時發出的訊號
異常處理:
1,if 可以進行異常處理,但是有一下缺點:
-重讀程式碼
-可讀性差
2,try except 處理異常
try:
被檢測的程式碼塊
except 異常型別:
try中一旦檢測到異常,執行到這個位置的邏輯
try:
age = input('1==>:')
int(age)
num2 = input('2===>:')
int(num2)
except ValueError as e:
print(e)
print('1')
執行後:
1==>:1 #輸入1,符合邏輯會繼續執行下邊程式碼
2===>:sw #不符合邏輯,會直接跳到異常處理except 處進行,執行完畢會跳出異常處理繼續執行下邊程式碼
invalid literal for int() with base 10: 'sw'
1
-異常類只能用來處理指定的異常情況,如果非指定異常則無法處理.未捕捉到異常,程式直接報錯
-多分枝:碰到指定異常直接處理,處理完畢直接跳出異常執行下邊程式碼
try:
age = input('1==>:')
int(age)
num2 = input('2===>:')
int(num2)
l = []
l[10000]
except ValueError as e:
print(e)
except IndexError as e:
print(e)
print('11111')
1==>:1
2===>:2
list index out of range
11111
-萬能異常 Exception,碰到有異常就直接處理
try:
age = input('1==>:')
int(age)
num2 = input('2===>:')
int(num2)
l = []
l[10000]
except Exception as e:
print(e)
print('11111')
1==>:we #異常
invalid literal for int() with base 10: 'we'#處理異常
11111
**********************
-else 異常處理中的else代表程式碼無異常會輸出else的程式碼
try:
age = input('1==>:')
int(age)
except ValueError as e:
print(e)
except Exception as e:
print(e)
else:#程式碼無異常會輸出else
print('程式碼無異常')
print('11111')
1==>:1
程式碼無異常
11111
*****************
-finally 在處理異常中,無論程式碼是否有異常都會執行finally模組程式碼,通常是用於清理工作。如下:
try:
age = input('1==>:')
int(age)
except Exception as e:
print(e)
else:
print('程式碼無異常')
finally:
print('無論是否有異常,都會執行此模組,通常是進行清理工作')
print('11111')
/usr/local/bin/python3.7 /Users/chen/PycharmProjects/untitled1/day23/test.py
1==>:de
invalid literal for int() with base 10: 'de'
無論是否有異常,都會執行此模組,通常是進行清理工作
11111
*************************
1==>:1
程式碼無異常
無論是否有異常,都會執行此模組,通常是進行清理工作
11111
自定義異常
自定義異常:程式碼如下:
class 異常名(異常基類): #此處的異常基類:比如BaseException,Exception,LookupError等等。
def __init__(self,msg):
self.msg =msg
例如:輸入的字串,不會報錯,不是字串格式,會報錯,程式碼如下:
class Egonexception(BaseException):
def __init__(self,msg):
self.msg = msg
def __str__(self):
return self.msg
try:
raise Egonexception('23')
except Egonexception as e:
print(e)#=====》結果是23 因為輸入的'23'是字串格式.
斷言
assert 條件
s=4
print('====>')
assert s==4 #此程式碼相當於以下2行if程式碼:
#if s !=4:
#raise AssertionError
print('====>')
結果是:
====>
====>
******************
若s =5
s=5
print('====>')
assert s==4
print('====>')
結果是:AssertionError #報錯程式無法繼續往下執行
====>
使用try...except 的方式優點:
1,把錯誤處理和真正的工作分開來
2,程式碼更容易組織,更清晰,複雜的工作任務更容易實現
3,更安全了,不至於由於一些小的疏忽而使程式意外崩潰。