小甲魚python教程32-33講--python異常 筆記及習題答案
阿新 • • 發佈:2019-02-02
1.python標準異常總結:
2.檢測python異常並處理
1)try-except語句:
try:
檢測範圍
except Exception[as reason]:
出現異常後的處理程式碼
使用例子:
try:
int('abc')
sum=1+'1'
f=open('我為什麼是一個檔案.txt')
print(f.read())
f.close()
except OSError as reason:
print('檔案出錯啦\錯誤原因是'+str(reason) )
except TypeError as reason:
print('檔案出錯啦\錯誤原因是' +str(reason) )
except ValueError as reason:
print('檔案出錯啦\錯誤原因是'+str(reason) )
返回結果為:
檔案出錯啦\錯誤原因是invalid literal for int() with base 10: 'abc'
#注:若有多個錯誤先返回第一個
或者
try:
int('abc')
sum=1+'1'
f=open('我為什麼是一個檔案.txt')
print(f.read())
f.close()
except (OSError,TypeError,ValueError) :
print ('出錯啦')
#注:
將三種錯誤合成一個元組進行檢測,還要有一個出錯,就報錯
2)try-finally語句
try:
檢測範圍
except Exception[as reason]:
出現異常後的處理程式碼
finally:
無論如何都會被執行的程式碼
3)raise語句
自己引起一個異常
raise ZeroDivisionError('除數為0')
32講習題部分答案
1.請問一下程式碼是否會產生異常,如果會的話,請寫出異常的名稱:
mylist=[1,2,3,4,,]
語法錯誤:SyntaxError:invalid syntax
2.請問一下程式碼是否會產生異常,如果會的話,請寫出異常的名字:
mylist=[1,2,3,4,5]
print(mylist[len(mylist)])
IndexError,由於len(mylist)長度為5,5超出了mylist的索引範圍
3.請問一下程式碼是否會產生異常,請寫出異常的名稱:
mylist=[3,5,1,4,2]
mylist.sorted()
AttributionError,sorted是字串的內建方法,列表的內建方法,列表的內建方法是list.sort()。
4.如果一下程式碼是否會產生異常,如果會的話,請寫出異常的名字:
mydict={‘host’:'www.123.com','port':'80'}
print(mydict['server'])
異常名稱:KeyError 因為字典中沒有‘server’這個鍵
為了避免這個異常的發生,可以使用dict.get()方法
if not mydict.get('server'):
print('您訪問的鍵不存在')
5.請問下面是否會產生異常,請寫出異常的名稱
def myfun(x,y):
print(x,y)
f(x=1,2)
如果使用關鍵字引數的話,需要兩個引數均使用關鍵自引數
6.請寫出一下程式異常的名稱
f=open(r'c:\test.txt',wb)
f.write('i love u')
f.close()
open有兩個引數,應該是‘wb’,python會把其當做變數名,引發NameError
33講習題答案
0.我們使用什麼方法處理程式中出現的異常?
try:
檢測範圍
except Exception[as reason]:
出現異常後的處理程式碼
1.一個try語句可以和多個except語句搭配麼?為什麼?
可以,因為try語句中可能出現多類異常,利用多個except語句可以捕獲並處理我們感興趣的異常
2.如何同一處理多類異常?
try:
int('abc')
sum=1+'1'
f=open('我為什麼是一個檔案.txt')
print(f.read())
f.close()
except (OSError,TypeError,ValueError) :
print('出錯啦')
2.之前玩的一個小程式,只要輸入非整形資料,程式會like蹦出一場,請使用一下處理方法:
import random
secret=random.randint(1,10)
try:
temp=input("數字:")
guess=temp#將guess等於了一個字串
except(ValueError,EOFError,KeyboardInterrupt):
print('輸入錯誤!')#排除錯誤
guess=secret
print('不猜了')