1.異常 當出現錯誤時,程式就會發生異常 輸入num1=3,num2=0,程式產生異常 除了除零異常,還有許多種異常: (1)異常捕獲 使用try…except…語句來捕獲異常 輸出結果: 也可以在except後面加上具體的異常 (2)處理多個異常 上面的例子不止會出現除零異常,如果我輸入的不是數字 ...
1.異常
當出現錯誤時,程式就會發生異常
num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
print(float(num1)/float(num2))
輸入num1=3,num2=0,程式產生異常
除了除零異常,還有許多種異常:
ImportError:無法引入包或模塊
IndexError:下標索引超界
NameError:使用還未賦值的變數
SyntaxError:代碼邏輯出錯,不能執行
TypeError:傳入的對象類型與要求不符
ValueError:傳入一個不被期望的值,即使類型正確
KeyError:試圖訪問字典里不存在的鍵
IOError:輸入輸出異常
ZeroDivisionError:除零
AttributeError:嘗試訪問未知的對象屬性
(1)異常捕獲
使用try…except…語句來捕獲異常
num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
try:
print(float(num1)/float(num2))
except:
print('Error!')
輸出結果:
也可以在except後面加上具體的異常
num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
try:
print(float(num1)/float(num2))
except ZeroDivisionError:
print('Error!')
(2)處理多個異常
上面的例子不止會出現除零異常,如果我輸入的不是數字而是字母,也會產生異常
num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
try:
print(float(num1)/float(num2))
except ZeroDivisionError:
print('Error!')
except ValueError:
print('Input a num!')
輸出結果:
也可以只寫一個except語句
num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
try:
print(float(num1)/float(num2))
except (ZeroDivisionError,ValueError): #一定要用()包起來
print('Error!')
(3)else語句
num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
try:
print(float(num1)/float(num2))
except (ZeroDivisionError,ValueError):
print('Error!')
else:
print('Input right!')
如果產生異常就不會執行else語句
(4)finally語句
num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
try:
print(float(num1)/float(num2))
except (ZeroDivisionError,ValueError):
print('Error!')
else:
print('Input right!')
finally:
print('Over!')
不管會不會產生異常,都會執行finally語句.所以finally語句多用來收尾.
(5)輸出異常信息
如果想要輸出異常信息,並且使用預設的異常提示
num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
try:
print(float(num1)/float(num2))
except Exception as e:
print(e)
print('Error!')
else:
print('Input right!')
finally:
print('Over!')
輸出結果:
(6)拋出異常
raise需要指定一個參數,必須是一個異常的實例或者是異常的類
a=1
raise ValueError('Error!')
輸出結果:
在except裡面,raise可以不用傳入參數,這樣會將異常再次拋出
num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
try:
print(float(num1)/float(num2))
except Exception as e:
print(e)
raise
輸出結果:
2.斷言
assert後面接的第一個參數應該是一個布爾表達式,如果表達式的值為True,不會中斷程式,如果表達式的值為False,就會中斷程式
assert後面接的第二個參數是產生中斷之後要輸出的內容
num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
assert (float(num2)!=0),'Error!'
print(float(num1)/float(num2))
輸出結果: