什麼是錯誤和異常?
作為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.當在函式 現異常時,如果在函式中沒有對異常進行處理,則異常會在函式呼叫處傳播,直到傳遞到全域性...