您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Python永久存儲(chǔ)和異常處理的方法是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
Python之永久存儲(chǔ)(pickle模塊)
存儲(chǔ)成一個(gè)二進(jìn)制數(shù)列
存放:pickling
讀?。簎npickling
永久存儲(chǔ)一個(gè)列表
>>> import pickle
>>> my_list = [123,3.14159,'China',['another list']]
>>> pickle_file = open('E:\hyx02\Python學(xué)習(xí)\my_list.pkl','wb')
>>> pickle.dump(my_list,pickle_file)
>>> pickle_file.close
my_list.pkl中的后綴名寫(xiě)什么都可以。
上面的dump()方法:
pickle.dump(obj, file, [,protocol])
序列化對(duì)象,將對(duì)象obj保存到文件file中去。參數(shù)protocol是序列化模式,默認(rèn)是0(ASCII協(xié)議,表示以文本的形式進(jìn)行序列化),protocol的值還可以是1和2(1和2表示以二進(jìn)制的形式進(jìn)行序列化。其中,1是老式的二進(jìn)制協(xié)議;2是新二進(jìn)制協(xié)議)。file表示保存到的類(lèi)文件對(duì)象,file必須有write()接口,file可以是一個(gè)以'w'打開(kāi)的文件或者是一個(gè)StringIO對(duì)象,也可以是任何可以實(shí)現(xiàn)write()接口的對(duì)象。
測(cè)試一下剛才的存儲(chǔ)結(jié)果:
>>> pickle_file = open('E:\hyx02\Python學(xué)習(xí)\my_list.pkl','rb')
>>> my_list2 = pickle.load(pickle_file)
>>> print(my_list2)
[123, 3.14159, 'China', ['another list']]
代碼中的rb:二進(jìn)制形式
同理:
永久存儲(chǔ)一個(gè)字典
我們可以利用這種方法把數(shù)據(jù)做成一個(gè)數(shù)據(jù)包
例如:把一個(gè)字典(很多城市的信息)寫(xiě)成一個(gè)包
>>> import pickle
>>> pickle_file=open('E:\hyx02\Python學(xué)習(xí)\city_data.aaa','wb')
>>> city={'北京':'簡(jiǎn)稱“京”,古稱燕京、北平,是中華人民共和國(guó)首都、省級(jí)行政區(qū)、直轄市、國(guó)家中心城市、超大城市。'}
>>> pickle.dump(city,pickle_file)
>>> pickle_file.close()
然后調(diào)用時(shí):
>>> import pickle
>>> pickle_file=open('E:\hyx02\Python學(xué)習(xí)\city_data.aaa','rb')
>>> city2 = pickle.load(pickle_file)
>>> city2
{'北京': '簡(jiǎn)稱“京”,古稱燕京、北平,是中華人民共和國(guó)首都、省級(jí)行政區(qū)、直轄市、國(guó)家中心城市、超大城市。'}
就可以精簡(jiǎn)程序了
Python之異常處理(Exception)
file_name = input('請(qǐng)輸入需要打開(kāi)的文件名:')
f = open(file_name)
print('文件的內(nèi)容是:')
for each_line in f:
print(each_line)
輸入錯(cuò)誤文件名:拋出找不到文件異常FileNotFoundError
FileNotFoundError: [Errno 2] No such file or directory: 'aaa'
常見(jiàn)異常
AssertionError:斷言語(yǔ)句(assert)失敗
>>> my_list = ['aaaaa']
>>> assert len(my_list) > 0
>>> my_list.pop()
'aaaaa'
>>> assert len(my_list) > 0
Traceback (most recent call last):
File "", line 1, in
assert len(my_list) > 0
AssertionError
拋出AssertionError異常,assert作為程序中間的檢查點(diǎn)
如下圖:
AttributeError:嘗試訪問(wèn)未知的對(duì)象屬性
>>> my_list.aaa
Traceback (most recent call last):
File "", line 1, in
my_list.aaa
AttributeError: 'list' object has no attribute 'aaa'
拋出AttributeError異常,如下圖:
IndexError:索引超出序列的范圍
KeyError:不存在的Key
>>> my_dict = {'one':1,'two':2,'three':3}
>>> my_dict['fout']
Traceback (most recent call last):
File "", line 1, in
my_dict['fout']
KeyError: 'fout'
拋出KeyError異常,如下圖:
#用get()方法不會(huì)拋異常
NameError:訪問(wèn)不存在的變量
OSError:操作系統(tǒng)產(chǎn)生的異常,有很多,比如最開(kāi)始的FileNotFoundError就屬于OSError
OverflowError:數(shù)值運(yùn)算超出最大限制,Python中不常見(jiàn)
SyntaxError:Python的語(yǔ)法錯(cuò)誤
>>> print 'aaa'
SyntaxError: Missing parentheses in call to 'print'. Did you mean print('aaa')?
拋出語(yǔ)法錯(cuò)誤,沒(méi)有括號(hào),要變成函數(shù)調(diào)用的形式
如下圖:
鄭州哪家人流醫(yī)院好 http://3g.zyfuke.com/
TypeError:無(wú)法計(jì)算,例如不同類(lèi)型之間運(yùn)算
ZeroDivisionError:除數(shù)為0
異常檢測(cè)
try_except語(yǔ)句
try:
檢測(cè)范圍
except Exception[as reason]:
出現(xiàn)異常(Exception)后的處理代碼
例子:
try:
f = open('xxx.txt')
print(f.read())
f.close()
except OSError as reason:
print('文件出錯(cuò)啦~\n錯(cuò)誤的原因是:'+str(reason))
except TypeError as reason:
print('類(lèi)型出錯(cuò)啦~\n錯(cuò)誤的原因是:'+str(reason))
運(yùn)行結(jié)果如下圖:
try:
sum = 1 + '1'
f = open('xxx.txt')
print(f.read())
f.close()
except OSError as reason:
print('文件出錯(cuò)啦~\n錯(cuò)誤的原因是:'+str(reason))
except TypeError as reason:
print('類(lèi)型出錯(cuò)啦~\n錯(cuò)誤的原因是:'+str(reason))
運(yùn)行結(jié)果如下圖:
也可以合并寫(xiě)作:
except (OSError,TypeError) as reason:
print('出錯(cuò)啦~\n錯(cuò)誤的原因是:'+str(reason))
但是不推薦上述try_except語(yǔ)句,比如由于程序中斷而導(dǎo)致的沒(méi)有關(guān)閉文件,于是有: try-finally語(yǔ)句
try-finally語(yǔ)句
try:
檢測(cè)范圍
except Exception[as reason]
出現(xiàn)異常(Exception)后的處理代碼
finally:
無(wú)論如何都會(huì)被執(zhí)行的代碼
例子:
try:
f = open('xxx.txt')
print(f.read())
sum = 1 + '1'
except (OSError,TypeError) as reason:
print('出錯(cuò)啦~\n錯(cuò)誤的原因是:'+str(reason))
finally:
f.close()
raise語(yǔ)句
>>> raise ZeroDivisionError('除數(shù)為0的異常')
顯示上述解釋內(nèi)容
“Python永久存儲(chǔ)和異常處理的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。