[問題] 例外處理
python 的例外處理會用到的關鍵字:
try, except, else, finally
後面 2個關鍵字好像可以不用存在 ?
例如:
try:
A
B
C (出現例外)
D
except:
E
F
G
else:
H
I
finally:
J
K
正常情形下,
應該是 A->B->C->D->H->I->J->K
出現例外,
則是 A->B->C->E->F->G->J->K
假如我將程式碼改成
try:
A
B
C (出現例外)
D
except:
E
F
G
else:
H
I
J
K
結果不是也一樣, 那 finally 這個關鍵字不是沒有用 ?
else 好像也可以不用, 只要預先設立一個flag
在 try 裡面設為 true, except 則為 false
在 J, K 前面加上 if(flag):
這樣不是也不用 else 關鍵字 ?
--
肝不好 ▁▁ ● ◤ 肝若好
人生是黑白的 ▏ ◤ 考卷是空白的
▏ ◤ 、 ﹐
● ●b 囧 ▎ ●> ● ◤ ▌ ﹍﹍ 0 ▊囧> 幹...
▲ ■┘ ■ ▎ ■ █◤ ▌ ㄏ▋ ︶■
〈﹀ ∥ ▁▁∥ ▎ ﹀〉◤ ▋ ▊ 〈\ ψcockroach727
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.25.105
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1460980193.A.B0C.html
推
04/18 20:03, , 1F
04/18 20:03, 1F
我若將 JK 放到和 try,except 的平行位置
不是塞在 except 或是 else 裡面
例外處理完不是一定會經過 ?
→
04/18 20:05, , 2F
04/18 20:05, 2F
→
04/18 20:05, , 3F
04/18 20:05, 3F
→
04/18 20:06, , 4F
04/18 20:06, 4F
→
04/18 20:06, , 5F
04/18 20:06, 5F
→
04/18 20:06, , 6F
04/18 20:06, 6F
從官方教學文件 https://docs.python.org/3.4/tutorial/errors.html
抓下的一句話
The use of the else clause is better than adding additional code to the try
clause because it avoids accidentally catching an exception that wasn’t
raised by the code being protected by the try ... except statement.
好像是不鼓勵將不相關的部分塞進 try 裡面
所以才想到用類似布林運算來處理
推
04/18 20:30, , 7F
04/18 20:30, 7F
→
04/18 20:30, , 8F
04/18 20:30, 8F
※ 編輯: obelisk0114 (140.112.25.105), 04/18/2016 22:12:42
→
04/18 23:52, , 9F
04/18 23:52, 9F
意思是在 except 裡面又發生例外狀況而使得沒放在 finally 裡面的 JK 沒被執行 ?
※ 編輯: obelisk0114 (140.112.25.105), 04/19/2016 20:05:23
→
04/20 00:13, , 10F
04/20 00:13, 10F
→
04/20 00:13, , 11F
04/20 00:13, 11F
→
04/20 00:13, , 12F
04/20 00:13, 12F
→
04/20 00:15, , 13F
04/20 00:15, 13F
→
04/20 00:15, , 14F
04/20 00:15, 14F
→
04/20 00:15, , 15F
04/20 00:15, 15F
推文看不懂
若在 C 發生例外,不是會直接跳到 except 部分, D 會執行 ?
else 不是只有沒發生例外才會執行 ?
→
04/20 00:18, , 16F
04/20 00:18, 16F
→
04/20 00:18, , 17F
04/20 00:18, 17F
→
04/20 00:18, , 18F
04/20 00:18, 18F
→
04/20 00:18, , 19F
04/20 00:18, 19F
我用下面這段程式執行會跑出 error, raise 可以用在 except 裡面 ?
a=1
b=2
c=0
try:
print('a/b = ' + str(a/b))
print('------try------')
print('a/c = ' + str(a/c))
print('我在 try 裡面')
except:
print('除以0')
print('----except-----')
raise
else:
print('成功')
print('------else-----')
finally:
print('我在 finally 裡面')
print('----finally----')
print('我沒有歸屬')
print('------外面-----')
※ 編輯: obelisk0114 (140.112.25.105), 04/20/2016 19:48:32
推
04/20 23:27, , 20F
04/20 23:27, 20F
→
04/20 23:28, , 21F
04/20 23:28, 21F
推
04/20 23:35, , 22F
04/20 23:35, 22F
→
04/20 23:36, , 23F
04/20 23:36, 23F
→
04/20 23:38, , 24F
04/20 23:38, 24F
→
04/20 23:38, , 25F
04/20 23:38, 25F
所以以下例子
try:
A
B
C (可能出現例外 1)
D
except:
E
F (可能出現例外 2)
G
else:
H
I
finally:
J
K
L
M
完全正常情況,
A->B->C->D->H->I->J->K->L->M
例外 1 出現, 之後正常
A->B->C->E->F->G->J->K->L->M
例外都出現,
A->B->C->E->F->J->K-> 程式出現例外,終止
這樣嗎 ?
※ 編輯: obelisk0114 (140.112.25.105), 04/22/2016 12:41:31
→
04/22 21:08, , 26F
04/22 21:08, 26F
→
04/22 21:08, , 27F
04/22 21:08, 27F
→
04/22 21:08, , 28F
04/22 21:08, 28F
→
04/22 21:08, , 29F
04/22 21:08, 29F
→
04/22 21:08, , 30F
04/22 21:08, 30F
也就是 finally 是讓程式延後到跑完裡面的內容才終止,
讓外面呼叫他的程式比較容易處理 ?
※ 編輯: obelisk0114 (140.112.25.105), 04/22/2016 21:26:04
Python 近期熱門文章
PTT數位生活區 即時熱門文章