一、json
使用 Json 函數(shù)需要導(dǎo)入 json 庫(kù):import json
I. 數(shù)據(jù)類(lèi)型轉(zhuǎn)化對(duì)照表
- Python 轉(zhuǎn) Json
| Python | Json |
|---|---|
| dict | object |
| list, tuple | array |
| str | string |
| int, float | number |
| True | true |
| False | false |
| None | null |
- Json 轉(zhuǎn) Python
| Json | Python |
|---|---|
| array | list |
| 其余同上 |
II. 函數(shù)
| 1 | json.dumps(對(duì)象) | 將 Python對(duì)象編碼成 Json字符串 |
|---|
result = json.dumps([10, 'abc', True, None])
print(type(result), result)
結(jié)果:
<class 'str'> [10, "abc", true, null] # '[10, "abc", true, null]'
| 2 | json.loads(字符串[, encoding]) | 將 Json字符串解碼為 Python對(duì)象 |
|---|
message = '{"name": "張三", "age": 18, "sex": null, "marry": true}'
content = json.loads(message, encoding='utf-8')
print(type(content), content)
結(jié)果:
<class 'dict'> {'name': '張三', 'age': 18, 'sex': None, 'marry': True}
| 3 | json.dump(對(duì)象,文件對(duì)象) | 將 Python對(duì)象編碼成 Json字符串,寫(xiě)入指定文件對(duì)象中 |
|---|
all_student = [
{'name': '小明', 'age': 12, 'tel': '1237736'},
{'name': 'yuting', 'age': 18, 'tel': '23333'}
]
with open('student.json', 'w', encoding='utf-8') as f:
json.dump(all_student, f) # 相當(dāng)于 f.write(json.dumps(all_student))
| 4 | json.load(文件對(duì)象, encoding) | 將 Json文件中的 Json字符串讀出,并解碼為 Python對(duì)象 |
|---|
with open('data.json', encoding='utf-8') as f:
result = json.load(f) # 相當(dāng)于 result = json.loads(f.read())
print(type(result), result['msg'])
結(jié)果:
<class 'dict'> 成功!
二、requests
I. 安裝
File -> Settings ->Project -> Project Interpreter -> + (添加) -> 搜索requests -> Install Package
II. 方法
| get(url, params=None) | |
|---|---|
| url | 字符串,需要獲取的數(shù)據(jù)的接口地址 |
| params | 字典,參數(shù)列表(給服務(wù)器發(fā)送請(qǐng)求的時(shí)候需要傳給服務(wù)器的數(shù)據(jù)) |
注(完整的接口):
https://www.apiopen.top/meituApi?page=1
協(xié)議 ://主機(jī)地址 /路徑 ?參數(shù)名1=值1 &參數(shù)名2=值2
- 發(fā)送請(qǐng)求,并且獲取返回的數(shù)據(jù)(服務(wù)返回的數(shù)據(jù)叫響應(yīng))
response = requests.get('https://www.apiopen.top/meituApi?page=1')
response 類(lèi)型:
<class 'requests.models.Response'>
- 從響應(yīng)中獲取數(shù)據(jù)
- 獲取json數(shù)據(jù)
gx_json = response.json() # 會(huì)自動(dòng)將json數(shù)據(jù)轉(zhuǎn)換成python對(duì)應(yīng)的數(shù)據(jù)
gx_json 類(lèi)型:
<class 'dict'>
- 獲取字符串?dāng)?shù)據(jù)
gx_text = response.text
gx_text 類(lèi)型:
<class 'str'>
- 獲取二進(jìn)制數(shù)據(jù)(原始數(shù)據(jù))
gx_bytes = response.content
gx_bytes 類(lèi)型:
<class 'bytes'>
三、exception
1. 異常捕獲
I. try - except
(可以捕獲所有類(lèi)型的異常 - 只要代碼段1中出現(xiàn)了異常就捕獲)
語(yǔ)法格式:
try:
?代碼段1(可能會(huì)出現(xiàn)異常的代碼段)
except:
?代碼段2(出現(xiàn)異常后處理異常的代碼段)
其他語(yǔ)句
II. try - except 錯(cuò)誤類(lèi)型
(捕獲指定類(lèi)型的異常 - 只有代碼段1中出現(xiàn)了指定類(lèi)型的異常才捕獲)
語(yǔ)法格式:
try:
?代碼段1(可能會(huì)出現(xiàn)異常的代碼段)
except 錯(cuò)誤類(lèi)型:
?代碼段2(出現(xiàn)異常后處理異常的代碼段)
其他語(yǔ)句
III. try - except (錯(cuò)誤類(lèi)型1,錯(cuò)誤類(lèi)型2...)
(同時(shí)捕獲多種指定異常)
語(yǔ)法格式:
try:
?代碼段1(可能會(huì)出現(xiàn)異常的代碼段)
except (錯(cuò)誤類(lèi)型1,錯(cuò)誤類(lèi)型2...):
?代碼段2(出現(xiàn)異常后處理異常的代碼段)
其他語(yǔ)句
IV. try - except 錯(cuò)誤類(lèi)型1 - except 錯(cuò)誤類(lèi)型2...
(同時(shí)捕獲多種異常,可以對(duì)不同的異常做不同的處理)
語(yǔ)法格式:
try:
?代碼段1(可能會(huì)出現(xiàn)異常的代碼段)
except 錯(cuò)誤類(lèi)型1:
?代碼段2
except 錯(cuò)誤類(lèi)型2:
?代碼段3
其他語(yǔ)句
2.拋出異常
主動(dòng)讓程序奔潰
raise 錯(cuò)誤類(lèi)型
(程序執(zhí)行到這句代碼就出現(xiàn)指定類(lèi)型的異常!)
說(shuō)明:錯(cuò)誤類(lèi)型 - 可以是系統(tǒng)提供的錯(cuò)誤類(lèi)型, 也可以是自定義錯(cuò)誤類(lèi)型(要求這個(gè)值必須是一個(gè)類(lèi),而且是Exception的子類(lèi))