Python(四)異常處理和檔案讀寫

2021-10-07 12:46:49 字數 4934 閱讀 8450

什麼是錯誤和異常?

作為python初學者,在剛學習python程式設計時,經常會看到一些報錯資訊。python有兩種錯誤很容易辨認:語法錯誤和異常。

即便python程式的語法是正確的,在執行它的時候,也有可能發生錯誤。執行期檢測到的錯誤被稱為異常。大多數的異常都不會被程式處理,都以錯誤資訊的形式展現。異常以不同的型別出現,這些型別都作為資訊的一部分列印出來: 例子中的型別有 zerodivisionerror,nameerror 和 typeerror。

錯誤資訊的前面部分顯示了異常發生的上下文,並以呼叫棧的形式顯示具體資訊

捕捉異常可以使用try/except語句。 try/except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常資訊並處理。

如果你不想在異常發生時結束你的程式,只需在try裡捕獲它

try:

#執行別的**

except :

#如果在try的部分發生異常,執行的語句

except ,:

#如果在try的部分發生異常,獲得附加的資料執行的語句

else:

#如果沒有發生異常,執行的語句

無論try語句塊中是否觸發異常,都會執行finally子句中的語句塊,因此一般用於關閉檔案或關閉因系統錯誤而無法正常釋放的資源。比如檔案關閉,釋放鎖,把資料庫連線返還給連線池等

try:

normal execution block

except a:

exception a handle

except b:

exception b handle

except c:

exception c handle

else:

if no exception get here

finally:

print('finally')

try:

normal execution block

except (a,b,c) as e: # e獲取錯誤型別的詳細資訊

exception e handle

else:

if no exception get here

finally:

print('finally')

以**中,我們可以使用raise關鍵字來自定義異常:

raise [exception [, args [, traceback]]]

例如:try:

name = input('輸入變數名稱:')

if name.isdigit():

raise nameerror('bad name!')

except nameerror as e:

print(e)

總結

1.except語句不是必須的,finally語句也不是必須的,但是二者必須要有乙個,否則就沒有try的意義了。

2.except語句可以有多個,python會按except語句的順序依次匹配你指定的異常,如果異常已經處理就不會再進入後面的except語句。

3.except語句可以以元組形式同時指定多個異常,參見例項**。

4.except語句後面如果不指定異常型別,則預設捕獲所有異常,你可以通過logging或者sys模組獲取當前異常。

5.如果要捕獲異常後要重複丟擲,請使用raise,後面不要帶任何引數或資訊。

6.不建議捕獲並丟擲同乙個異常,請考慮重構你的**。

7.不建議在不清楚邏輯的情況下捕獲所有異常,有可能你隱藏了很嚴重的問題。

8.盡量使用內建的異常處理語句來 替換try/except語句,比如with語句,getattr()方法。

為什麼需要使用檔案讀寫 ?

任何一種語言,檔案的讀寫都是非常常見的。python的檔案讀寫非常簡單,僅僅乙個函式open

常用開啟模式:

1、r 只能讀

2、r+ 可讀可寫,不會建立不存在的檔案,從頂部開始寫,會覆蓋之前此位置的內容

3、w+ 可讀可寫,如果檔案存在,則覆蓋整個檔案,不存在則建立

4、w 只能寫,覆蓋整個檔案,不存在則建立

5、a 只能寫,從檔案底部新增內容 不存在則建立

6、a+ 可讀可寫 從檔案頂部讀取內容 從檔案底部新增內容 不存在則建立

注:不建議用r+的方式去寫入檔案,會使之前的檔案不完整。

file = open('d:\\test.txt')	#預設為r,唯讀模式

content = file.read()

print(content)

file.close()

使用open開啟檔案後一定要記得呼叫檔案物件的close()方法。比如可以用try/finally語句來確保最後能關閉檔案。

file = open('thefile.txt')

try:

all_the_text = file.read()

finally:

file.close()

注:不能把open語句放在try塊裡,因為當開啟檔案出現異常時,檔案物件file無法執行close()方法。

讀檔案,讀文字檔案

input = open('data', 'r') #第二個引數預設為r

讀二進位制檔案

input = open('data', 'rb')

with open('d:\\test.txt','r+') as f,open('f:\\test.txt','r+') as d:

content = f.read()

print(content)

with open 開啟檔案的方式,可以不用呼叫close()方法

檔案的讀取方式

file = open('thefile.txt')			

content = file.read() #讀取所有內容

content_party = file.read(100) #讀取固定位元組

content_oneline = file.readline() #讀取一行內容

content_all = file.readlines() #讀取每一行內容

前面主要是怎麼讀檔案,那麼寫檔案這麼做呢?

1.寫文字檔案

output = open('data', 'w')

2.寫二進位制檔案

output = open('data', 'wb')

3.追加讀檔案

output = open('data', 'w+')

4.寫資料

file_object = open('thefile.txt', 'w')

file_object.write(all_the_text)

file_object.close( )

5.寫入多行

file_object.writelines(list_of_text_strings)

注意,呼叫writelines寫入多行在效能上會比使用write一次性寫入要高。

讀取csv檔案

逗號分隔值(comma-separated values,csv,有時也稱為字元分隔值,因為分隔字元也可以不是逗號),其檔案以純文字形式儲存**資料(數字和文字)。

csv是一種通用的、相對簡單的檔案格式,被使用者、商業和科學廣泛應用。最廣泛的應用是在程式之間轉移**資料,而這些程式本身是在不相容的格式上進行操作的(往往是私有的和/或無規範的格式)。因為大量程式都支援某種csv變體,至少是作為一種可選擇的輸入/輸出格式。

特徵:csv檔案規則:

1 開頭是不留空,以行為單位。

2 可含或不含列名,含列名則居檔案第一行。

3 一行資料不跨行,無空行。

4 以半形逗號(即,)作分隔符,列為空也要表達其存在。

5 列內容如存在半形引號(即"),替換成半形雙引號("")轉義,即用半形引號(即"")將該字段值包含起來。

6 檔案讀寫時引號,逗號操作規則互逆。

7 內碼格式不限,可為 ascii、unicode 或者其他。

8 不支援特殊字元

通常csv檔案開頭是不留空的,以行為單位,每行中記錄一張的多項資料,每項資料用逗號來分割(英文逗號)。一般來說,集圖用的.csv檔案格式是:

檔名,檔案大小(以位元組為單位),crc校驗值,注釋(可省略)

如果電腦上安裝了microsoft excel 的話 .csv檔案預設是被excel開啟的

python操作csv檔案

讀檔案

import csv

csv_reader = csv.reader(open('d:/test.csv'))

for row in csv_reader:

print(row)

import csv #開啟檔案,用with開啟可以不用去特意關閉file了,python3不支援file()開啟檔案,只能用open()

with open('d:/test.csv', 'rb') as f:

reader = csv.reader(f)

for row in reader:

print(row)

寫檔案 import csv

list = ['1', '2','3','4','5']

outfile = 'd:/test.csv'

out = open(outfile, 'a')

csv_writer = csv.writer(out)

csv_writer.writerow(list) 可能遇到的問題:直接使用這種寫法會導致檔案每一行後面會多乙個空行

out = open(outfile, 'a', newline='')

csv_writer = csv.writer(out)

csv_writer.writerow(list)

Python異常和檔案

try語句 try 塊 可能出現錯誤的語句 except 異常型別 as 異常名 塊 出現錯誤以後的處理 式 except 異常型別 as 異常名 塊 出現錯誤以後的處理 式 except 異常型別 as 異常名 塊 出現錯誤以後的處理 式 else 塊 沒出錯時要執 的語句 finally 塊 是...

Python中異常和檔案

程式在執行過程當中,不可避免的會出現一些錯誤,這些錯誤在程式中,我們稱其為異常。程式執行過程中,一旦出現異常將會導致程式立即終止,異常以後的 全部都不會執行!程式執行時出現異常,目的並不是讓我們的程式直接終止!python是希望在出現異常時,我們可以編寫 來對異常進行處理!try語句 try 塊 可...

Python之異常和檔案詳解

1.程式在執行過程中可能產生的錯誤,比如使用了不存在的索引,不同型別的計算。print 10 0 報錯2.處理異常 程式執行出現異常,目的並不是讓程式終止,而且讓程式出現異常時,我們可以編寫 進行處理。1.當在函式 現異常時,如果在函式中沒有對異常進行處理,則異常會在函式呼叫處傳播,直到傳遞到全域性...