视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
python学习笔记-错误处理
2020-11-27 14:27:00 责编:小采
文档


程序中的错误处理有多种方式,一类是约定好错误码,然后根据返回的错误码来判断是否发生错误,以及错误的原因。

但是这么做容易将正确的返回值和错误码混在一起,必须要写很多代码来区分,非常不方便。另外一旦出错,还需要一级一级往上报,知道有一级可以处理它。

比较成熟的做法是try...except...finally...这一套错误处理机制。该机制不会干扰正常的返回值。同时也无需一级一级手动上报,而是只需要有一级捕获并处理即可。

代码:

try:
print open("Demo.py", 'r')
n = 1 / 0
except ZeroDivisionError, e:
print "zeroDivisionError", e
except ValueError, e:
print "ValueError", e
else:
print "No Error catched"
finally:
print "finally"

使用错误处理有几个点需要注意:

可以写多个except用于捕获多个exception

父类exception可以捕获子类的exception,已经被捕获的exception不会再被传递给其他exception。

可以用else来处理没有exeption的情况

finally是无论有无错误都会执行。


Build-in Exception的种类

Python(2.x)内置Exception的继承关系见下图:

The class hierarchy for built-in exceptions is:
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- StandardError
| +-- BufferError
| +-- ArithmeticError
| | +-- FloatingPointError
| | +-- OverflowError
| | +-- ZeroDivisionError
| +-- AssertionError
| +-- AttributeError
| +-- EnvironmentError
| | +-- IOError
| | +-- OSError
| | +-- WindowsError (Windows)
| | +-- VMSError (VMS)
| +-- EOFError
| +-- ImportError
| +-- LookupError
| | +-- IndexError
| | +-- KeyError
| +-- MemoryError
| +-- NameError
| | +-- UnboundLocalError
| +-- ReferenceError
| +-- RuntimeError
| | +-- NotImplementedError
| +-- SyntaxError
| | +-- IndentationError
| | +-- TabError
| +-- SystemError
| +-- TypeError
| +-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning

当然我们也可以自定义一个类,例如:

class MyException(StandardException):

当然,推荐使用Build-in的Exception。在Build-in的Exception中找不到我们所需要的Exception的时候,我们才自定义Exception。

抛出自定义Exception使用以下语法:

raise MyException("this is my Exception")

在测试代码中,我们对Exception的处理中可以直接print exception。但是实际生产代码中直接打印log可能不是很妥。我们可以通过简单的配置使用logging.exception(msg)将错误打印到日志中。如何正确使用python内置的logging模块,可以另开一篇文章介绍。

下载本文
显示全文
专题