1.異常
+++++++++++++++++++++++++++++++
異常是程序運(yùn)行中出現(xiàn)的錯(cuò)誤或者遺漏的bug就叫異常巧婶。
1. 異常語(yǔ)句的使用:
try:
#可能出現(xiàn)異常的代碼塊
print(4/0)
except Exception as e:
#Exception 所有異常的父類伏恐,捕獲后存儲(chǔ)在e中
print('出現(xiàn)異常時(shí)執(zhí)行',e,type(e))
else:
#沒(méi)有出現(xiàn)錯(cuò)誤時(shí)執(zhí)行
print('沒(méi)有出現(xiàn)錯(cuò)誤時(shí)執(zhí)行')
finally:
#finally,無(wú)論是否出現(xiàn)異常漠吻,都執(zhí)行
print('無(wú)論是否出現(xiàn)異常凑耻,都執(zhí)行')
2.文件
+++++++++++++++++++++++++++++++
正常的文件讀取操作為:打開文件open(fileName)扇商,操作文件(讀取或者寫入)file_obj.read()彬呻,關(guān)閉文件file_obj.close()。
file_name = './1.txt'
#打開文件
file_obj=open(file_name)
print(file_obj)
#<_io.TextIOWrapper name='../1.txt' mode='r' encoding='UTF-8'>
#操作文件()
file_obj.read()
#關(guān)閉文件
file_obj.close()
如果文件忘記關(guān)閉的話财饥,資源會(huì)被長(zhǎng)期占有,會(huì)造成內(nèi)存泄漏折晦。所以钥星,可以使用with...as... 的方式讀取文件。with...as...結(jié)束后會(huì)自動(dòng)關(guān)閉文件满着。
file_name = './1.txt'
# with...as.. 的方式讀取文件谦炒。結(jié)束后可以自動(dòng)關(guān)閉
try:
with open(file_name,encoding='utf-8') as file_obj:
content = file_obj.read()
print(content)
except Exception as e:
print(e,type(e))
#文件不存在時(shí) [Errno 2] No such file or directory: './1.txt' <class 'FileNotFoundError'>
read() 來(lái)讀取文件時(shí),他會(huì)直接將所有的文件都讀取出來(lái)风喇,如果要讀取的文件較大宁改,一次性讀取到內(nèi)存里來(lái)時(shí),會(huì)導(dǎo)致性能下降响驴,內(nèi)存溢出等問(wèn)題透且。所以 可以使用分段讀取的方式撕蔼。譬如:
file_name = './1.txt'
try:
with open(file_name,encoding='utf-8') as file_obj:
# content = file_obj.read()
chunk = 100
while True:
#read(size) 可以設(shè)置一個(gè)每次讀取的長(zhǎng)度值豁鲤。以實(shí)現(xiàn)分段讀取的作用
content = file_obj.read(chunk)
# 退出循環(huán)
if not content:
# 內(nèi)容讀取完畢后 退出循環(huán)
break
print(content,end="|||")
except Exception as e:
print(e,type(e))
分段讀取的其他方式還有:
# file_obj.readline() # 每次讀取一行
# file_obj.readlines() #按照行數(shù),將內(nèi)容存放在list中
def fn():
with open(file_name, encoding='utf-8') as file_obj:
while True:
line = file_obj.readline()
yield line
f = fn()
print(next(f),end='---------')
print(next(f),end='---------')
當(dāng)然鲸沮,也可以結(jié)合readline()琳骡,使用生成器的方法來(lái)解決這個(gè)問(wèn)題。
- 寫入文件可以使用file_obj.write()方法讼溺,在open()方法時(shí)楣号,需要設(shè)置一下mode參數(shù)。r:只讀,w:只寫炫狱,a:追加藻懒,......