作者icetofux ()
看板Python
標題[問題] 例外(exception)處理的技巧或原則
時間Tue Sep 8 23:28:38 2020
其實這不是單純python的問題,但python是我慣用的程式語言所以發在這裡。
請問各位先進關於例外處理的"方法",有沒有什麼書、教學或是基本原則可
以推薦?
我目前看過的書對於例外處理都著重於語法上的說明,導致真的要用的時候
try要框多大、那些東西是該except的我沒什麼概念,另外很多人都說
exception可以分離錯誤處理跟商務邏輯,但我看書上的範例卻沒什麼感覺,
好像只是另一種形式的if錯誤測試。到最後code裡好像真的也沒用到什麼
try/except,問題都等到真正程式在執行的時候才會發現一個改一個。
另外因為except後程式會中斷,導致我也不太敢用python做一些需要長時間
運行、穩定性高的程式。這都是源於我對於例外處理的認識不足導致,我想
要克服這個狀況。
謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.169.89.184 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1599578920.A.140.html
1F:推 remia81: try except else finally組合起來用可以不中斷 09/09 01:15
2F:→ keepingJBJ: 我的理解上if...else是程式處理對象或物件的邏輯,try 09/09 03:28
3F:→ Pieteacher: while 搭配 try except 跟 break continues 09/09 07:57
4F:→ TuCH: 程式出錯了不中斷是要繼續錯下去嗎 09/09 08:16
5F:→ icetofux: 如果像是server這類的程式,當某次請求發生錯誤,比起直 09/09 09:34
6F:→ icetofux: 接中斷,會不會忽略這個請求的後續動作,但繼續服務其他 09/09 09:34
7F:→ icetofux: 的連線是比較好的選擇@_@ 09/09 09:34
8F:推 TuCH: 如果目的是要不中斷 那就要最外層包一個try 去處理例外 09/09 09:58
9F:推 ddavid: Server不中斷也有其極限,最外圈硬包try其實不是好的作法 09/09 11:26
10F:→ ddavid: ,或者說也不是不行,但內部還是要對小部分把預想到的狀況 09/09 11:28
11F:→ ddavid: 都各自處理掉,最外圈只接完全沒設想到的狀況 09/09 11:29
12F:→ ddavid: 當然在沒設想到的狀況發生時硬要Server繼續跑下去也可能風 09/09 11:30
13F:→ ddavid: 險很大,需要評估取捨 09/09 11:31
14F:→ ddavid: 比如說硬碟滿了,Server硬跑的結果可能就是後續使用者的操 09/09 11:32
15F:→ ddavid: 作全部無法紀錄,這樣硬跑結果最後還是全回溯是否有比較好 09/09 11:33
16F:→ alvinlin: 程式寫多了就有感覺了。還有你寫反了,有了except程式才 09/09 19:10
17F:→ alvinlin: 不會中斷。 09/09 19:11
18F:→ alvinlin: 程式是先中斷了,except是去接中斷後去處理。 09/09 19:12
19F:→ alvinlin: 很簡單的例子就是除0的中斷。 09/09 19:13
20F:→ alvinlin: 通常能用if就不會用try。所以try是在if沒辦法解決問題的 09/10 11:41
21F:→ alvinlin: 情況用的 09/10 11:41
22F:→ alvinlin: 或是你覺得有寫不完的if只好try了 09/10 11:43
23F:→ alvinlin: 要程式不中斷,就在except裡寫個pass,你的程式就永遠不 09/10 11:47
24F:→ alvinlin: 會中斷了。只是結果也不對而已 09/10 11:47
25F:→ alvinlin: 還有就是你想要刻意exception的,讓不同的exception 有 09/10 11:55
26F:→ alvinlin: 對應的處理方式 09/10 11:55
27F:推 ddavid: 樓上說的是例外處理的一般論,但我一直覺得Python根本上的 09/10 16:43
28F:→ ddavid: 設計有不少成分在幾近強迫使用者採取例外控制流程而非if 09/10 16:44
29F:→ ddavid: 不少套件根本性地不提供return value而只給exception來處 09/10 16:45
30F:→ ddavid: 理即便用if也很直覺合理的事情 09/10 16:46
31F:→ ddavid: 這時候就很容易發生到底是要依循能if就if的概念,接了他的 09/10 16:47
32F:→ ddavid: exception後改用return往自己code的更上層傳,還是保持一 09/10 16:47
33F:→ ddavid: 致性地就接個手做點必要處理後raise繼續往上層 09/10 16:48
34F:→ ddavid: 這樣的考慮空間 09/10 16:49
35F:→ alvinlin: 可能有吧,但又何妨。反正左手右手打到蚊子就是好手,兩 09/11 01:47
36F:→ alvinlin: 手一起也行。我自己是能用if儘量不用exception,但對電 09/11 01:47
37F:→ alvinlin: 腦來說其實不是0就是1沒差別。對套件來說,可能exceptio 09/11 01:47
38F:→ alvinlin: n比較好外包吧。 09/11 01:47
39F:→ alvinlin: 總之,能達到目的其實都好。 09/11 01:51