作者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/cn.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