在函式呼叫的過程中,假設函式裡面有迴圈巢狀的函式,那麼在裡面的函式遇到異常的時候,就終止函式,後面的語句將不會執行,而try後面的語句也將會中止執行,轉而except。
異常其實也是乙個類,是乙個物件
此外,如果沒有錯誤發生,可以在except語句塊後面加乙個else,當有錯誤發生時,會自動執行else語句
python所有的錯誤都是從baseexception類派生的,常見的錯誤型別和繼承關係看這裡
使用try…except捕獲錯誤還有乙個巨大的好處,就是可以跨越多層呼叫,也就是說,不需要在每個可能出錯的地方去捕獲錯誤只要在合適的層次去捕獲錯誤就可以了。這樣一來,就大大減少了寫try…except…finally的麻煩。
我們自己編寫的函式也可以丟擲錯誤,如果要丟擲錯誤,首先根據需要,可以定義乙個錯誤的class,選擇好繼承關係,然後,用raise語句丟擲乙個錯誤的例項,只有在必要的時候才定義我們自己的錯誤型別。如果可以選擇python已有的內建的錯誤型別(比如valueerror,typeerror),盡量使用python內建的錯誤型別
對於系統自己檢查錯誤,一旦在某處檢測到錯誤的話,就會停止後面的程式執行,而再有必要檢測的地方寫乙個try的話,那麼在try後面的**快中,如果有異常的話,就只終止**塊裡面的**,然後丟擲異常,但會繼續執行後面的程式
第一種是cpu等著,也就是程式暫停執行後續**,等100m的資料在10秒後寫入磁碟,再接著往下執行,這種模式稱為同步io;
另一種方法是cpu不等待,只是告訴磁碟,「您老慢慢寫,不著急,我接著幹別的事去了」,於是,後續**可以立刻接著執行,這種模式稱為非同步io。
對於檔案的開啟的時候需要注意的是,我們要開啟的檔案的大小是多少,如果10g那麼記憶體可能就不夠用,所以我們可以f.read(size),設定讀取的時候的大小,f.readline(),讀一行
open(),函式中可以使用四個引數,第乙個表示檔案的位置,第二個表示檔案的開啟方式,第三個表示要讀取非utf-8編碼的文字檔案,需要給open()函式傳入encoding引數,第四個引數是當出現錯誤編碼時該如何處理,error引數, errors=』ignore』,表示忽略
在我們往檔案中些資料的時候,寫完以後一定要close(),因為在寫的過程中系統不會直接把資料寫入檔案中,而是先寫入快取中,然後再寫入檔案中,如果我們寫完後不close,那麼資料有可能沒有全部寫入檔案中,就會出現丟失
utf-8編碼,這個可以理解為一般的漢字,字串,數字,日期等這些字元,經過utf-8編碼以後全部變成01二進位制檔案,乙個檔案中既可以村這個經編碼的二進位制檔案,又可以存普通資料
當我們需要往記憶體中直接寫str的時候,我們就需要io模組裡面的stringio()函式,這裡注意python是區分大小寫的,這裡其實往記憶體中直接寫str就相當於,在記憶體中申請了乙個小空間用來寫str
具體做法,首先import io模組裡面的stringio,然後f=stringio()這句話就相當於把這塊空間取名是f,也可把f理解為乙個在記憶體中的檔案,然後就可以用f.write(『』)
將字串寫入這個f空間中,讀取的時候可以用readlines(),也可以用print(f.getvalues())函式進行讀取
如果要寫入的是二進位制檔案,則用的是bytesio函式,只是在呼叫write函式的時候要多乙個utf-8編碼而已,例如:f.write(『中文』.encode(『utf-8』)),然後後面的操作和stringio一樣
python菜鳥日記5
1.在python中我們可以匯入模組,來呼叫模組裡面的函式,在乙個模組中,我們可以定義很多的函式和變數,但有些函式我們並不希望被別人使用,只希望在模組內部使用,那麼,我們可以通過 下劃線 字首來實現,比如 abc,qiuhe,但是python並沒有強制限制訪問函式或變數,只是一種程式設計的習慣而已 ...
python菜鳥日記8
1.python中的多程序程式設計概念 由於python是跨平台的,自然也應該提供乙個跨平台的多程序支援。multiprocessing模組就是跨平台版本的多程序模組。multiprocessing模組提供了乙個process類來代表乙個程序物件。2.python中的多執行緒程式設計具體做法 當我們...
python菜鳥日記9
1.collections模組中有乙個namedtuple函式,它用來建立乙個自定義的tuple物件,並且規定了tuple元素的個數,並可以用屬性而不是索引來引用tuple的某個元素,這樣一來,我們用namedtuple可以很方便地定義一種資料型別,它具備tuple的不變性,又可以根據屬性來引用,使...