Python基礎篇筆記 條件與迴圈 異常處理

2021-09-25 03:20:05 字數 2911 閱讀 1102

字典本身只有鍵是可迭代的,如果我們要遍歷它的值或者是鍵值對,就需要通過其內建的函式 values() 或者 items() 實現。其中,values() 返回字典的值的集合,items() 返回鍵值對的集合。

d = 

for k in d: # 遍歷字典的鍵

print(k)

name

dobgender

for v in d.values(): # 遍歷字典的值

print(v)

jason

2000-01-01

male

for k, v in d.items(): # 遍歷字典的鍵值對

print('key: {}, value: {}'.format(k, v))

key: name, value: jason

key: dob, value: 2000-01-01

key: gender, value: male

當我們同時需要索引和元素時,還有一種更簡潔的方式,那就是通過 python 內建的函式 enumerate()。用它來遍歷集合,不僅返回每個元素,並且還返回其對應的索引

# 遍歷乙個列表中的元素,當索引小於 5 時,列印輸出

l = [1, 2, 3, 4, 5, 6, 7]

for index, item in enumerate(l):

if index < 5:

print(item)

1234

5

給定下面兩個列表 attributes 和 values,要求針對 values 中每一組子列表 value,輸出其和 attributes 中的鍵對應後的字典,最後返回字典組成的列表。

attributes = ['name', 'dob', 'gender']

values = [['jason', '2000-01-01', 'male'],

['mike', '1999-01-01', 'male'],

['nancy', '2001-02-01', 'female']

]# expected outout:

[, ,

]

# 一行版

[dict(zip(attributes, value)) for value in values]

# 迴圈版:

l =

for value in values:

d = {}

for i in range(3):

d[attributes[i]] = value[i]

當程式中存在多個 except block 時,最多只有乙個 except block 會被執行。換句話說,如果多個 except 宣告的異常型別都與實際相匹配,那麼只有最前面的 except block 會被執行,其他則被忽略。

異常處理中,還有乙個很常見的用法是finally,經常和tryexcept放在一起來用。無論發生什麼情況,finally block 中的語句都會被執行,哪怕前面的 try 和 excep block 中使用了 return 語句。

案例 1:

import sys

try:

f = open('file.txt', 'r')

.... # some data processing

except oserror as err:

print('os error: {}'.format(err))

except:

print('unexpected error:', sys.exc_info()[0])

finally:

f.close()

上述檔案的讀取案例中

try block 嘗試讀取 file.txt 這個檔案,並對其中的資料進行一系列的處理,到最後,無論是讀取成功還是讀取失敗,程式都會執行 finally 中的語句——關閉這個檔案流,確保檔案的完整性。因此,在 finally 中,我們通常會放一些無論如何都要執行的語句。  值得一提的是,對於檔案的讀取,我們也常常使用 with open,with open 會在最後自動關閉檔案,讓語句更加簡潔。

案例 2:

大型社交**的後台,需要針對使用者傳送的請求返回相應記錄。使用者記錄往往儲存在 key-value 結構的資料庫中,每次有請求過來後,我們拿到使用者的 id,並用 id 查詢資料庫中此人的記錄,就能返回相應的結果。  

資料庫返回的原始資料,往往是 json string 的形式,這就需要我們首先對 json string 進行 decode(解碼),你可能很容易想到,在 json.loads() 函式中,輸入的字串如果不符合其規範,那麼便無法解碼,就會丟擲異常,因此加上異常處理十分必要。

try:

data = json.loads(raw_data)

....

except jsondecodeerror as err:

print('jsondecodeerror: {}'.format(err))

案例 3:

以資料庫的連線、讀取為例的異常處理

try:

db = db.connect('') # 可能會丟擲異常

raw_data = db.querydata('') # 可能會丟擲異常

except (dbconnectionerror, dbquerydataerror) err:

print('error: {}'.format(err))

except後面的錯誤型別先丟擲資料庫連線錯誤,之後才丟擲查詢錯誤

景霄《python核心技術與實戰》專欄

python學習 python基礎 判斷與迴圈

break continue 關於條件判斷和迴圈,原理與其他語言相通,只是語法不一樣,這裡簡述一下。python中實現條件判斷通過if語句來實現 語法為 也可以通過elif做更細緻的判斷 if condition1 statements1 do something when condition1 i...

Python基礎篇 python之if條件

python的if語句是類似的其他語言。if語句包含乙個邏輯表示式,使用哪些資料進行了比較,比較的結果的基礎上作出決定。if語句的語法是 if expression statement s 這裡的if語句,條件是第一次評估。如果條件為真,那就是,如果其值為非零,則執行語句塊 s 否則,下乙個語句之後...

python學習 基礎篇 條件判斷與迴圈

coding utf 8 author y.qq for i in range 1,10,1 雙重迴圈列印9x9乘法表 for j in range 1,i 1,1 if j i print j,x i,i j if i 9 continue i 1 while i 10 雙重迴圈列印9x9乘法表 ...