標籤:python 異常處理
第三章中主要介紹了簡單的檔案讀取和簡單的異常處理操作。
首先建立檔案目錄:HeadFirstPython\chapter3,在Head First Pythong官方網站下載需要使用的檔案:sketch.txt,並放入到之前建好的目錄中。
相關文法讀取檔案
the_file = open(‘sketch.txt) # 開啟檔案,擷取到檔案對象# 對檔案中的資料進行一些處理the_file.close() # 關閉檔案
異常捕獲
import systry: # 可能會出現異常的代碼 f = open(‘myfile.txt‘) s = f.readline() i = int(s.strip())# 對異常進行處理# 類似於Java中的catch塊except OSError as err: # 可以指定待捕獲的異常 print("OS error: {0}".format(err))except ValueError: pass # 不做任何操作,直接跳過except: print("Unexpected error:", sys.exc_info()[0])
互動式環境下擷取檔案
在python互動環境中(pyhton idle)中,可以使用如下的一些命令進行一些檔案操作:
>>> import os # 從標準庫匯入os>>> os.getcwd() # 擷取當前的工作目錄,類似於Linux下的pwd‘D:\\program\\Python34‘>>> os.chdir("D:\code\python\HeadFirstPython\chapter3") # 切換工作目錄>>> os.getcwd()‘D:\\code\\python\\HeadFirstPython\\chapter3‘>>> data = open(‘sketch.txt‘) # 開啟檔案,擷取到檔案對象,相當於一個迭代器iterator>>> print(data.readline(),end="") # 讀取檔案的一行,data.readline()Man: Is this the right room for an argument?>>> print(data.readline(),end="")Other Man: I‘ve told you once.>>> data.seek(0) # 使data回到檔案起始位置0# 使用for迴圈獲得檔案的每一行>>> for eachline in data: print(eachline,end="")
對資料進一步的處理:異常處理
再看一下檔案中的資料,發現每一行都是用“:”進行分隔的,因此考慮在輸出時進行最佳化。在對檔案進行處理時,會出現相應的問題,比如檔案中有些行是不含有“:”的,這時就會跑拋出ValueError異常,當檔案不存在或者讀取失敗時,則會拋出IOError,等等。面對這些異常,有兩種處理思路:
1. 提前考慮好程式中可能出現的異常,對這些情況進行處理,從而避免異常的發生。
2. 採用異常捕獲機制:讓異常發生,但是對異常進行捕獲,捕獲到後再進行相關的操作。
第一種思路:
import osif os.path.exists(‘sketch.txt‘): data = open(‘sketch.txt‘) for each_line in data: if each_line.find(‘:‘) != -1: (role, line_spoken) = each_line.split(‘:‘, 1) print(role, end=‘‘) print(‘ said: ‘, end=‘‘) print(line_spoken,end=‘‘) data.close()else: print(‘檔案不存在!‘)
第二種思路:捕獲異常:
try: data = open(‘sketch2.txt‘) for each_line in data: # if each_line.find(‘:‘) != -1: try: (role, line_spoken) = each_line.split(‘:‘, 1) print(role, end=‘‘) print(‘ said: ‘, end=‘‘) print(line_spoken,end=‘‘) except: pass # 不做任何操作,直接跳過 data.close()except: print(‘檔案不存在‘)
相關知識點
1、split():對字串進行分割,函數原型是str.split(sep=None, maxsplit=-1),它包含兩個參數,第一個是使用分割符,第二個是最大分割次數。如:
>>> ‘1,2,3‘.split(‘,‘)[‘1‘, ‘2‘, ‘3‘]>>> ‘1,2,3‘.split(‘,‘, maxsplit=1)[‘1‘, ‘2,3‘]>>> ‘1,2,,3,‘.split(‘,‘)[‘1‘, ‘2‘, ‘‘, ‘3‘, ‘‘]>>> ‘1 2 3‘.split()[‘1‘, ‘2‘, ‘3‘]>>> ‘1 2 3‘.split(maxsplit=1)[‘1‘, ‘2 3‘]>>> ‘ 1 2 3 ‘.split()[‘1‘, ‘2‘, ‘3‘]
2、open():用來讀取檔案,同時建立了一個迭代器,可以對檔案進行按行讀取
3、readline():讀取檔案的一行
4、seek():將迭代器重新指向檔案的開始處(第一行)
5、close():關閉開啟的檔案
6、find():尋找子串在字串中的位置,不存在則返回-1
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Head First Python Chapter3:檔案讀取和異常處理