1. 程式人生 > 資訊 >海南將正式對電商平臺提出“禁塑”要求

海南將正式對電商平臺提出“禁塑”要求

異常處理

錯誤

-語法錯誤

-邏輯錯誤

異常

異常就是程式執行錯誤時發出的訊號

異常處理:

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,更安全了,不至於由於一些小的疏忽而使程式意外崩潰。