最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

python学习笔记-错误处理

来源:动视网 责编:小采 时间:2020-11-27 14:27:00
文档

python学习笔记-错误处理

python学习笔记-错误处理:程序中的错误处理有多种方式,一类是约定好错误码,然后根据返回的错误码来判断是否发生错误,以及错误的原因。但是这么做容易将正确的返回值和错误码混在一起,必须要写很多代码来区分,非常不方便。另外一旦出错,还需要一级一级往上报,知道有一级可以处理
推荐度:
导读python学习笔记-错误处理:程序中的错误处理有多种方式,一类是约定好错误码,然后根据返回的错误码来判断是否发生错误,以及错误的原因。但是这么做容易将正确的返回值和错误码混在一起,必须要写很多代码来区分,非常不方便。另外一旦出错,还需要一级一级往上报,知道有一级可以处理


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

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

比较成熟的做法是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模块,可以另开一篇文章介绍。

文档

python学习笔记-错误处理

python学习笔记-错误处理:程序中的错误处理有多种方式,一类是约定好错误码,然后根据返回的错误码来判断是否发生错误,以及错误的原因。但是这么做容易将正确的返回值和错误码混在一起,必须要写很多代码来区分,非常不方便。另外一旦出错,还需要一级一级往上报,知道有一级可以处理
推荐度:
标签: 失败 处理 学习
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top