[問題] 例外(exception)處理的技巧或原則

看板Python作者時間3年前 (2020/09/08 23:28), 編輯推噓4(4035)
留言39則, 7人參與, 3年前最新討論串1/1
其實這不是單純python的問題,但python是我慣用的程式語言所以發在這裡。 請問各位先進關於例外處理的"方法",有沒有什麼書、教學或是基本原則可 以推薦? 我目前看過的書對於例外處理都著重於語法上的說明,導致真的要用的時候 try要框多大、那些東西是該except的我沒什麼概念,另外很多人都說 exception可以分離錯誤處理跟商務邏輯,但我看書上的範例卻沒什麼感覺, 好像只是另一種形式的if錯誤測試。到最後code裡好像真的也沒用到什麼 try/except,問題都等到真正程式在執行的時候才會發現一個改一個。 另外因為except後程式會中斷,導致我也不太敢用python做一些需要長時間 運行、穩定性高的程式。這都是源於我對於例外處理的認識不足導致,我想 要克服這個狀況。 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.169.89.184 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1599578920.A.140.html

09/09 01:15, 3年前 , 1F
try except else finally組合起來用可以不中斷
09/09 01:15, 1F

09/09 03:28, 3年前 , 2F
我的理解上if...else是程式處理對象或物件的邏輯,try
09/09 03:28, 2F

09/09 07:57, 3年前 , 3F
while 搭配 try except 跟 break continues
09/09 07:57, 3F

09/09 08:16, 3年前 , 4F
程式出錯了不中斷是要繼續錯下去嗎
09/09 08:16, 4F

09/09 09:34, 3年前 , 5F
如果像是server這類的程式,當某次請求發生錯誤,比起直
09/09 09:34, 5F

09/09 09:34, 3年前 , 6F
接中斷,會不會忽略這個請求的後續動作,但繼續服務其他
09/09 09:34, 6F

09/09 09:34, 3年前 , 7F
的連線是比較好的選擇@_@
09/09 09:34, 7F

09/09 09:58, 3年前 , 8F
如果目的是要不中斷 那就要最外層包一個try 去處理例外
09/09 09:58, 8F

09/09 11:26, 3年前 , 9F
Server不中斷也有其極限,最外圈硬包try其實不是好的作法
09/09 11:26, 9F

09/09 11:28, 3年前 , 10F
,或者說也不是不行,但內部還是要對小部分把預想到的狀況
09/09 11:28, 10F

09/09 11:29, 3年前 , 11F
都各自處理掉,最外圈只接完全沒設想到的狀況
09/09 11:29, 11F

09/09 11:30, 3年前 , 12F
當然在沒設想到的狀況發生時硬要Server繼續跑下去也可能風
09/09 11:30, 12F

09/09 11:31, 3年前 , 13F
險很大,需要評估取捨
09/09 11:31, 13F

09/09 11:32, 3年前 , 14F
比如說硬碟滿了,Server硬跑的結果可能就是後續使用者的操
09/09 11:32, 14F

09/09 11:33, 3年前 , 15F
作全部無法紀錄,這樣硬跑結果最後還是全回溯是否有比較好
09/09 11:33, 15F

09/09 19:10, 3年前 , 16F
程式寫多了就有感覺了。還有你寫反了,有了except程式才
09/09 19:10, 16F

09/09 19:11, 3年前 , 17F
不會中斷。
09/09 19:11, 17F

09/09 19:12, 3年前 , 18F
程式是先中斷了,except是去接中斷後去處理。
09/09 19:12, 18F

09/09 19:13, 3年前 , 19F
很簡單的例子就是除0的中斷。
09/09 19:13, 19F

09/10 11:41, 3年前 , 20F
通常能用if就不會用try。所以try是在if沒辦法解決問題的
09/10 11:41, 20F

09/10 11:41, 3年前 , 21F
情況用的
09/10 11:41, 21F

09/10 11:43, 3年前 , 22F
或是你覺得有寫不完的if只好try了
09/10 11:43, 22F

09/10 11:47, 3年前 , 23F
要程式不中斷,就在except裡寫個pass,你的程式就永遠不
09/10 11:47, 23F

09/10 11:47, 3年前 , 24F
會中斷了。只是結果也不對而已
09/10 11:47, 24F

09/10 11:55, 3年前 , 25F
還有就是你想要刻意exception的,讓不同的exception 有
09/10 11:55, 25F

09/10 11:55, 3年前 , 26F
對應的處理方式
09/10 11:55, 26F

09/10 16:43, 3年前 , 27F
樓上說的是例外處理的一般論,但我一直覺得Python根本上的
09/10 16:43, 27F

09/10 16:44, 3年前 , 28F
設計有不少成分在幾近強迫使用者採取例外控制流程而非if
09/10 16:44, 28F

09/10 16:45, 3年前 , 29F
不少套件根本性地不提供return value而只給exception來處
09/10 16:45, 29F

09/10 16:46, 3年前 , 30F
理即便用if也很直覺合理的事情
09/10 16:46, 30F

09/10 16:47, 3年前 , 31F
這時候就很容易發生到底是要依循能if就if的概念,接了他的
09/10 16:47, 31F

09/10 16:47, 3年前 , 32F
exception後改用return往自己code的更上層傳,還是保持一
09/10 16:47, 32F

09/10 16:48, 3年前 , 33F
致性地就接個手做點必要處理後raise繼續往上層
09/10 16:48, 33F

09/10 16:49, 3年前 , 34F
這樣的考慮空間
09/10 16:49, 34F

09/11 01:47, 3年前 , 35F
可能有吧,但又何妨。反正左手右手打到蚊子就是好手,兩
09/11 01:47, 35F

09/11 01:47, 3年前 , 36F
手一起也行。我自己是能用if儘量不用exception,但對電
09/11 01:47, 36F

09/11 01:47, 3年前 , 37F
腦來說其實不是0就是1沒差別。對套件來說,可能exceptio
09/11 01:47, 37F

09/11 01:47, 3年前 , 38F
n比較好外包吧。
09/11 01:47, 38F

09/11 01:51, 3年前 , 39F
總之,能達到目的其實都好。
09/11 01:51, 39F
文章代碼(AID): #1VLwCe50 (Python)