1. 程式人生 > >Python:異常處理

Python:異常處理

異常 exception (基礎)

什麼是錯誤
	錯誤是指由於邏輯或語法等導致程式無法正常執行的問題

特點
	無法預知

什麼是異常
	異常是程式出錯時標識的一種狀態.當導常發生時,程式不會再
	向下執行,而轉去呼叫此函式的地方待處理此錯誤並恢復為正常狀態
作用:
	用作訊號通知,通知上層呼叫者有錯誤產生需要處理

程式有兩種狀態:
	正常狀態/異常狀態

try語句 的兩種語法

	try-except語句
	try-finally語句

try-except語句的語法
	try:
    	可能觸發異常的語句
	except 錯誤型別1 [as 變數1]:
    	異常處理語句1
	except 錯誤型別2 [as 變數2]:
    	異常處理語句2
	except (錯誤型別3, 錯誤型別4) [as 變數3]:
    	異常處理語句3
	...
	except:
    	異常處理語句other
	else:
    	末發生異常的語句
	finally:
    	最終語句

作用:
	償試捕獲錯誤,得到異常通知,將程式由異常狀態轉換為正常狀態並
	繼續執行
說明:
	as 子句是用於繫結錯誤物件的變數,可以省略
	except 子句可以有一個或多個,但至少要有一個
	else 子句最多隻能有一個.也可以省略
	finally子句最多隻能有一個.也可以省略
(錯誤型別,可能後期補充)



try-finally 語句
語法
	try:
    	可能觸發異常的語句
	finally:
    	最終語句
說明:
	finally子句不可以省略
	一定不存在except子句
作用:
	通常用try-finally語句來做觸發異常時必須要處理的事情
	無論異常是否發生,finally子句都會被執行
注:
	try-finally語句不會改變程式的(正常/異常)狀態
在這裡插入程式碼片

raise 語句

作用:
  觸發一個錯誤,讓程式進入異常狀態
  傳送錯誤通知給呼叫者
語法:
  raise 異常型別
  或
  raise 異常物件
  或
  raise  # 重新觸發上一次異常
示例:
  raise ValueError  # 
  raise ValueError("???????")
示例見:
  raise.py
  raise2.py

assert語句(斷言語句)

語法:
	assert 真值表達式, 錯誤資料(通常是字串)
作用:
	當真值表示式為False時,用錯誤資料建立一個
	AssertionError型別的錯誤,並進入異常狀態
	通常用來故意製造一個錯誤

等同於:
	if bool(真值表達式) == False:
    	raise AssertionError(錯誤資料)

異常中的語句小結:
	try-except 語句 
  	用於捕獲(接收)錯誤通知,把異常狀態轉為正常狀態
try-finally語句
  	用於執行在任何狀態(正常/異常)都必須要執行的語句
raise 語句
  	觸發錯誤(傳送錯誤通知),讓程式進入異常狀態
assert 語句
  	根據條件觸發AssertionError型別的錯誤通知

迭代器 Iterator

什麼是迭代器
迭代器是訪問可迭代物件的工具
迭代器是指iter(obj) 函式返回的物件(例項)
迭代器可以用next(it) 函式獲取可迭代物件的資料

迭代器函式iter和next
iter(iterable) 從可迭代物件中獲取一個迭代器,iterable
     	必須是能提供一個迭代器的可迭代物件
next(Iterator)  從迭代器iterator中獲取下一個記錄,如
    	果無法獲取下一條記錄,則觸發StopIteration異常

說明:
迭代器只能往前取值,不會後退
用iter函式可以返回一個可迭代物件的迭代器
示例:
  L = [2, 3, 5, 7]
  it = iter(L)  # 從L物件中獲取一個迭代器
  print(next(it))  # 2
  print(next(it))  # 3
  print(next(it))  # 5
  print(next(it))  # 7
  print(next(it))  # StopIteration 異常
  # 用迭代器訪問 range() 函式返回的整數序列生成器
  it = iter(range(1, 10, 3))
  next(it)  # 1
  next(it)  # 4
  next(it)  # 7
  next(it)  # StopIteration