day13 json與exception

一旭等、json

1.什么是json數(shù)據(jù)
json是一種具有特定語法的數(shù)據(jù)格式
2.json數(shù)據(jù)的語法
a.一個json數(shù)據(jù)只能有一個數(shù)據(jù)(有且只有一個)
b.這個數(shù)據(jù)的數(shù)據(jù)類型必須是json支持的數(shù)據(jù)類型
3.json支持的數(shù)據(jù)類型
a.數(shù)字類型(number):包含所有的數(shù)字需频,包括整數(shù)山橄、小數(shù)番官;例如:100,12.3
注意:整數(shù)前面不能加'+',支持科學(xué)計數(shù)法
b.字符串:使用雙引號括起來的數(shù)據(jù);例如:"saa"
c.布爾值:只有true和false
b.數(shù)組:相當(dāng)于Python的列表肴捉,用[]括起來鬓长,多個元素用逗號隔開;例如:[12,'asa']
e.字典:相當(dāng)于Python的字典巍糯,用{}括起來啸驯,多個鍵值對用逗號隔開,例如{"a":1}
f.空值:null相當(dāng)于Python中的None
4.Python處理json數(shù)據(jù)
1.將json數(shù)據(jù)轉(zhuǎn)換為Python數(shù)據(jù)(通過爬蟲獲取別人提供的json數(shù)據(jù)祟峦,在Python中處理)
Python中提供了json模塊罚斗,專門用來處理json數(shù)據(jù)
a.
json ---> Python
數(shù)字 --->int/float
字符串 ---> 字符串,可能雙引號會變成單引號
布爾 ---> bool宅楞,會將json中的true和false轉(zhuǎn)化為Python的大寫
數(shù)組 --->list
字典 ---->dict
空值(null) ---->None
b.loads
loads(字符串针姿,encodding=‘utf-8’) -將字符串中的json數(shù)據(jù)轉(zhuǎn)換成對應(yīng)的Python數(shù)據(jù)
8み骸!>嘁绞绒!注意:這兒的字符串中內(nèi)容必須是json數(shù)據(jù)

import json


def main():
    content = json.loads('"aaaa"', encoding='utf-8')
    print(content)

2.將Python中的數(shù)據(jù)轉(zhuǎn)換為json數(shù)據(jù)()
a.轉(zhuǎn)換方式
Python ---> json
int/float ---> 數(shù)字
str ---> 字符串
bool ---> True:true
list/tuple ---> 數(shù)組
dict ---> 字典
集合不能轉(zhuǎn)換為json數(shù)據(jù)
b.dumps(對象 ) -將指定的對象轉(zhuǎn)換成json數(shù)據(jù),以字符串的形式返回
這兒的對象指的就是Python數(shù)據(jù)
注意:返回值是字符串榕暇,并且字符串的內(nèi)容就是json數(shù)據(jù)

5.json文件處理
嚴(yán)格來說蓬衡,json文件是文件內(nèi)容是json的文件
load(文件對象) -將指定文件中的內(nèi)容讀出來,并且轉(zhuǎn)換成Python對應(yīng)的數(shù)據(jù)拐揭。
注意:這兒的文件對象對應(yīng)的文件必須是json文件
dump (對象撤蟆,文件對象) -將指定對象轉(zhuǎn)換成內(nèi)容是json格式的字符串,然后寫入指定的文件中
注意:這兒的對象對應(yīng)的類型必須是能夠轉(zhuǎn)換成json的數(shù)據(jù)類型
'''
studen = [
{'a': 's', 'as': 'as'},
{'a': 's', 'as': 'as'},
{'a': 's', 'as': 'awe'},
]
with open('tset1.json', 'w', encoding='utf-8') as test:
json.dump(studen, test)
練習(xí):用一個列表保存多個學(xué)生的信息堂污,寫函數(shù)向這個列表添加學(xué)生(姓名家肯、電話、成績)盟猖,要求數(shù)據(jù)本地化

all_students = []
print('================================')
addname = input('請輸入姓名:')
addage = int(input('請輸入年齡:'))
addscore = int(input('請輸入成績:'))
addtel = input('請輸入電話:')


def get_num():
    num = 1
    while True:
        yield '1%03.d' % (num)
        num += 1
num_gen = get_num()
def wg_input(addname, addage, addscore, addtel):
    with open('all_students.json', encoding='utf-8') as stu:
        all_students = json.load(stu)
        all_students.append(
            {'name': addname, 'num': next(num_gen), 'age': addage, 'score': addscore, 'tel': addtel})
    with open('all_students.json', 'w', encoding='utf-8') as stu:
        json.dump(all_students, stu)


wg_input(addname, addage, addscore, addtel)

二讨衣、requests

python中的數(shù)據(jù)請求(http請求),是第三方庫requests來提供的

1.requests第三方庫的使用
get/post方法都是發(fā)送請求獲取接口提供的數(shù)據(jù)
a.
get(url, params=None)
url - 字符串,需要獲取的數(shù)據(jù)的接口地址
params - 字典,參數(shù)列表(給服務(wù)器發(fā)送請求的時候需要傳給服務(wù)器的數(shù)據(jù))

https://www.apiopen.top/meituApi?page=1

完整的接口: 協(xié)議://主機(jī)地址/路徑?參數(shù)名1=值1&參數(shù)名2=值2

b.post(url, params=None, json=None)(暫時不管!)


response = requests.get('http://rap2api.taobao.org/app/mock/121184/studentsInfo')
print(response.json())

1.發(fā)送請求,并且獲取返回的數(shù)據(jù)
服務(wù)返回的數(shù)據(jù)叫響應(yīng)

    response = requests.get('https://www.apiopen.top/meituApi?page=1')
    # response = requests.get('https://www.apiopen.top/meituApi', {'page': 1})
    print(response)

2.從響應(yīng)中獲取數(shù)據(jù)
a.獲取json數(shù)據(jù)

    content_json = response.json()   # 會自動將json數(shù)據(jù)轉(zhuǎn)換成python對應(yīng)的數(shù)據(jù)
    print(type(content_json))
    print(content_json)

    # b.獲取字符串?dāng)?shù)據(jù)
    content_text = response.text
    print(type(content_text))
    print(content_text)

    # c.獲取二進(jìn)制數(shù)據(jù)(原始數(shù)據(jù))
    content_bytes = response.content
    print(content_bytes)

    # 下載圖片
    response2 = requests.get('http://tx.haiqq.com/uploads/allimg/170506/0H92Q915-1.jpg')
    with open('luffy.jpg', 'wb') as f:
        f.write(response2.content)

三式镐、異常捕獲

1.異常捕獲----讓本該報錯的代碼不報錯
知道某段代碼會出現(xiàn)異常反镇,但是又沒辦法避免,同時又不希望出現(xiàn)異常時程序崩潰娘汞;
這個時候就可以通過異常捕獲來讓程序不崩潰歹茶,來讓程序不崩潰并且自行處理異常
2.異常捕獲語法
a.try -except 可以捕獲所有異常
try:
代碼段1(可能出現(xiàn)異常的代碼)
except:
代碼段2(出現(xiàn)異常后的處理)
執(zhí)行過程:執(zhí)行代碼段1,如果代碼段1中出現(xiàn)異常你弦,程序不崩潰惊豺,直接執(zhí)行代碼段2
如果代碼段1沒有出現(xiàn)異常,不執(zhí)行代碼段2而是直接執(zhí)行后面的其他語句
b.try -except 錯誤類型(捕獲指定類型的異常 -只有代碼段1中出現(xiàn)了指定類型的異常才捕獲)
try:
代碼段1(可能出現(xiàn)異常的代碼)
except 錯誤類型:
代碼段2(出現(xiàn)異常后的處理)
c.try -except (錯誤類型1,錯誤類型2......)
try:
代碼段1(可能出現(xiàn)異常的代碼)
except (錯誤類型1禽作,錯誤類型2):
代碼段2(出現(xiàn)異常后的處理)
d.try - except 錯誤類型1 -except 錯誤類型2...(同時捕獲多種異常尸昧,并進(jìn)行不同處理)
try:
代碼段1(可能出現(xiàn)異常的代碼)
except 錯誤類型1:
代碼段2(出現(xiàn)異常后的處理)
except 錯誤類型1:
代碼段3(出現(xiàn)異常后的處理)

3.拋出異常 - 主動讓程序奔潰
raise 錯誤類型 -程序執(zhí)行到該行代碼,拋出指定類型的異常

說明:錯誤類型 -可以是系統(tǒng)提供的錯誤類型旷偿,也可以是自定義錯誤類型(要求這個值必須是一個類烹俗,而且exception的子類)

 def main():
  try:
      number =int(input('請輸入一個數(shù)字:'))
         print(number)
  except:
         print('輸入錯誤!')

練習(xí):輸入數(shù)字萍程,保存成int幢妄,如果輸入錯誤就繼續(xù)輸入,直到輸入正確為止

while True:
    try:
        number =int(input('請輸入一個數(shù)字:'))
        print(number)
        break
    except:
        print('輸入錯誤尘喝!')
class wgVaLueError(Exception):
    def __tr__(self):
        return '值錯誤磁浇!'

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市朽褪,隨后出現(xiàn)的幾起案子置吓,更是在濱河造成了極大的恐慌无虚,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衍锚,死亡現(xiàn)場離奇詭異友题,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)戴质,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門度宦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人告匠,你說我怎么就攤上這事戈抄。” “怎么了后专?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵划鸽,是天一觀的道長。 經(jīng)常有香客問我戚哎,道長裸诽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任型凳,我火速辦了婚禮丈冬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘甘畅。我一直安慰自己埂蕊,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布疏唾。 她就那樣靜靜地躺著粒梦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荸实。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天缴淋,我揣著相機(jī)與錄音准给,去河邊找鬼。 笑死重抖,一個胖子當(dāng)著我的面吹牛露氮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钟沛,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼畔规,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了恨统?” 一聲冷哼從身側(cè)響起叁扫,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤三妈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后莫绣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畴蒲,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年对室,在試婚紗的時候發(fā)現(xiàn)自己被綠了模燥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡掩宜,死狀恐怖蔫骂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情牺汤,我是刑警寧澤辽旋,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站慧瘤,受9級特大地震影響戴已,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锅减,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一糖儡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怔匣,春花似錦握联、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至剿骨,卻和暖如春代芜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浓利。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工挤庇, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贷掖。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓嫡秕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親苹威。 傳聞我的和親對象是個殘疾皇子昆咽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

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