Day12- 總結(jié)

01-json數(shù)據(jù)

1.什么是json數(shù)據(jù)

json是一種數(shù)據(jù)格式,滿足json格式的數(shù)據(jù)就是json數(shù)據(jù)。
文件后綴是.json,并且文件中的內(nèi)容滿足json格式

2.json格式

一個json中只有一個數(shù)據(jù);并且這個數(shù)據(jù)是json支持的數(shù)據(jù)類型的數(shù)據(jù)

json支持的數(shù)據(jù)類型
數(shù)字類型 - 包含所有的數(shù)字,包括整數(shù)和小數(shù)盗棵,列如:100,21.5北发,-20
字符串 - 使用雙引號括起來,列如:"123","abc123"
布爾 - true 和false
數(shù)組 - 相當與python中的列表纹因,使用[]括起來,括號里面是json支持的任意類型的數(shù)據(jù)
列如:["abc",100,true]
字典 - 相當于python中的字典琳拨,使用{}括起來瞭恰,括號里面試鍵值對。
鍵一般是字符串狱庇,值是json支持的任意類型的數(shù)據(jù)
特殊值 - null (相當于None)惊畏,表示空

3.python 中有一個內(nèi)置的模塊用來支持對json數(shù)據(jù)的處理:

a.將json數(shù)據(jù)轉(zhuǎn)換成python數(shù)據(jù)
b.將python數(shù)據(jù)轉(zhuǎn)換成json數(shù)據(jù)

import json

將json數(shù)據(jù)轉(zhuǎn)換成python數(shù)據(jù)

loads(字符串) - 將json格式的數(shù)據(jù)轉(zhuǎn)換成python對應(yīng)的數(shù)據(jù)
注意:這兒的字符串的內(nèi)容必須是json的數(shù)據(jù)

json - python
數(shù)字 整型/浮點型
字符串 字符串(雙引號會變單引號)
布爾 布爾(true -> True,false ->False)
數(shù)組 列表
字典 字典

py1 = json.loads('100')
print(py1,type(py1))
# 100 <class 'int'>

py2 = json.loads('"afcg"')
print(py2,type(py2))
# afcg <class 'str'>

py3 = json.loads('true')
print(py3,type(py3))
# True <class 'bool'>

py4 = json.loads('[100,"abc",true,null]')
print(py4,type(py4))
# [100, 'abc', True, None] <class 'list'>

py5 = json.loads('{"abc":1,"qwe":[1,2]}')
print(py5,type(py5))
# {'abc': 1, 'qwe': [1, 2]} <class 'dict'>
# 練習:
 with open('./data.json',encoding='utf-8')as f:
content = f.read()# 讀文件中的內(nèi)容
 data_dict = json.loads(content) # 將讀出的內(nèi)容轉(zhuǎn)換成python數(shù)據(jù)
 x = data_dict['data'][2]['age']
   print(x)

2.將python轉(zhuǎn)換成json數(shù)據(jù)

dumps(數(shù)據(jù)) - 將python數(shù)據(jù)轉(zhuǎn)換成內(nèi)容符合json格式的字符串
注意:最終結(jié)果是字符串

python json
int/float 數(shù)字
字符串 字符串(單引號會變雙引號)
布爾 布爾(True -> true)
列表/元祖 數(shù)組

js1 = json.dumps(100)
print(js1,type(js1))
# 100 <class 'str'>

js2 = json.dumps('abcdaf123\/')
print(js2,type(js2))
# "abcdaf123\\/" <class 'str'>

js3 = json.dumps(True)
print(js3,type(js3))
# true <class 'str'>

js4 = json.dumps((10,'abc',True))
print(js4,type(js4))
# [10, "abc", true] <class 'str'>

js5 = json.dumps([10,'20',True])
print(js5,type(js5))
# [10, "20", true] <class 'str'>

# js6 = json.dumps({'a':10,'abc':True})
# print(js6,type(js6))
# [10, "20", true] <class 'str'>
# 練習2:添加多個學生信息(姓名恶耽,年齡,電話)颜启,添加完成后偷俭,將數(shù)據(jù)保存到j(luò)son文件中,并且上次添加的信息不會刪除缰盏,下次添加的時候涌萤,是在上次的基礎(chǔ)上添加

with open('student.json',encoding='utf-8')as f:
    content = f.read()
    list1 = json.loads(content)

while True:
    name = input('姓名:')
    age = int(input('年齡:'))
    tel = input('電話:')
    dict1 = {'姓名':name,'年齡':age,'電話':tel}
    list1.append(dict1)
    value = input("是否繼續(xù)(y/n):")
    if value == 'n':
        break
print(list1)
with open('student.json','w',encoding='utf-8')as f:
    content = json.dumps(list1)
    f.write(content)

3.json文件操作相關(guān)方法

load(文件對象) - 將文件對象中的數(shù)據(jù)讀出來,并且轉(zhuǎn)換成python對應(yīng)的數(shù)據(jù)
(文件對象中的內(nèi)容必須是json格式的數(shù)據(jù))
dump(數(shù)據(jù)口猜,文件對象) - 將python數(shù)據(jù)轉(zhuǎn)換成json格式的字符串负溪,再寫入文件對象中

# json.load()
# json,dump()

02-異常捕獲

1.什么事異常

程序執(zhí)行過程中出現(xiàn)錯誤,也叫出現(xiàn)異常

2.異常捕獲

讓本來會出現(xiàn)異常的位置济炎,不出現(xiàn)異常川抡,而是自己處理異常出現(xiàn)的情況

3.怎么捕獲異常

a.情況1:捕獲所有的異常

try:
代碼段1
except:
代碼段2

執(zhí)行過程:執(zhí)行代碼段1,如果代碼段1出現(xiàn)異常须尚,不會崩潰猖腕,而是馬上執(zhí)行代碼段2.
如果代碼段1沒有異常,不會執(zhí)行代碼段2

try:
    print([1,2][3])
except:
    print('出現(xiàn)異常恨闪!')

b.情況2:捕獲指定異常

語法:
try:
代碼段1
except 錯誤類型:
代碼段2

執(zhí)行過程:執(zhí)行代碼段1,當代碼段1出項指定類型的異常后不崩潰而是執(zhí)行代碼段2

try:
    print([1,2,3][10])
    print('-------')
    print(int('abc'))
    print('+++++++')
except IndexError:
    print('下標越界放坏!')

c.情況三:同時捕獲多個異常咙咽,對不同的異常做出相同的反應(yīng)

try:
代碼段1
except(錯誤類型1,錯誤類型2淤年,錯誤類型3...):
代碼段2

執(zhí)行過程:執(zhí)行代碼段1钧敞,當代碼段1中出現(xiàn)了指定的異常,不崩潰麸粮,然后執(zhí)行代碼段2

try:
    print([1,2][3])
    print(int('abc'))
except(IndexError,KeyError,ValueError):
    print('出現(xiàn)多個異常中的一個')

d.情況四:同時捕獲多個異常溉苛,對不同異常做出不同反應(yīng)

try:
代碼段1
except 錯誤類型1:
代碼段2:
except 錯誤類型2:
代碼段3

try:
    print(int('abc'))
    print(int('abc'))
except KeyError:
    print('鍵錯誤!')
except IndexError:
    print('下標越界弄诲!')
except ValueError:
    print('值錯誤愚战!')

4.try - except - finally

try:
代碼段1
except:
代碼段2
finally:
代碼段3

不管代碼段1中是否出現(xiàn)異常,也不管異常是否能夠捕獲到齐遵,finally 后面的代碼段3都會執(zhí)行

try:
    print([1,2][1])
except:
    print('aaa')

什么時候使用異常捕獲:
明明知道某段代碼可能會出現(xiàn)異常寂玲,但是又沒有辦法避免,就使用異常捕獲

# 練習:統(tǒng)計學生的成績梗摇,到輸入的結(jié)果是'end'
 while True:
     try:
        score = float(input('輸入成績:'))
        break
        except ValueError:
        print('輸入有誤拓哟!請輸入數(shù)字')
# 封裝一個函數(shù),功能是獲取指定文件的內(nèi)容(普通文本文檔)
# 從封裝角度:調(diào)用者做的事情做的越少越好

def huoqu(file):
    try:
         with open(file,'r',encoding='utf-8')as f:
             content = f.read()
             return content
    except FileNotFoundError:
        print('文件路徑錯誤伶授!')
        return ''
text = huoqu('student.json')

03-拋出異常

拋出異常:主動讓程序出現(xiàn)異常

語法:
raise 錯誤類型 - 程序執(zhí)行到raise的時候直接拋出異常
注意:錯誤類型必須是一個類断序,并且這個類是Exception 的子類

# 輸入年齡流纹,如果輸入的年齡的范圍不再0到100,程序就崩潰
num = int(input())
if num< 0 or num>100:
    raise ValueError
else:
    print(num)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末违诗,一起剝皮案震驚了整個濱河市漱凝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌较雕,老刑警劉巖碉哑,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異亮蒋,居然都是意外死亡扣典,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門慎玖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贮尖,“玉大人,你說我怎么就攤上這事趁怔∈酰” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵润努,是天一觀的道長关斜。 經(jīng)常有香客問我,道長铺浇,這世上最難降的妖魔是什么痢畜? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮鳍侣,結(jié)果婚禮上丁稀,老公的妹妹穿的比我還像新娘。我一直安慰自己倚聚,他們只是感情好线衫,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惑折,像睡著了一般授账。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唬复,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天矗积,我揣著相機與錄音,去河邊找鬼敞咧。 笑死棘捣,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播乍恐,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼评疗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了茵烈?” 一聲冷哼從身側(cè)響起百匆,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎呜投,沒想到半個月后加匈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡仑荐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年雕拼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粘招。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡啥寇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出洒扎,到底是詐尸還是另有隱情辑甜,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布袍冷,位于F島的核電站磷醋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏胡诗。R本人自食惡果不足惜子檀,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乃戈。 院中可真熱鬧,春花似錦亩进、人聲如沸症虑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谍憔。三九已至,卻和暖如春主籍,著一層夾襖步出監(jiān)牢的瞬間习贫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工千元, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留苫昌,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓幸海,卻偏偏與公主長得像祟身,于是被迫代替她去往敵國和親奥务。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容