1. 程式人生 > >小甲魚python教程32-33講--python異常 筆記及習題答案

小甲魚python教程32-33講--python異常 筆記及習題答案

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('不猜了')