摘要:程序中的错误处理有多种方式,一类是约定好错误码,然后根据返回的错误码来判断是否发生错误,以及错误的原因。比较成熟的做法是这一套错误处理机制。可以用来处理没有的情况是无论有无错误都会执行。
程序中的错误处理有多种方式,一类是约定好错误码,然后根据返回的错误码来判断是否发生错误,以及错误的原因。
但是这么做容易将正确的返回值和错误码混在一起,必须要写很多代码来区分,非常不方便。
另外一旦出错,还需要一级一级往上报,知道有一级可以处理它。
比较成熟的做法是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):
pass
当然,推荐使用Build-in的Exception。在Build-in的Exception中找不到我们所需要的Exception的时候,我们才自定义Exception。
抛出自定义Exception使用以下语法:
raise MyException("this is my Exception")
Exception的记录
在测试代码中,我们对Exception的处理中可以直接print exception。但是实际生产代码中直接打印log可能不是很妥。我们可以通过简单的配置使用logging.exception(msg)将错误打印到日志中。
如何正确使用python内置的logging模块,可以另开一篇文章介绍。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/38325.html
showImg(http://source1.godblessyuan.com/blog_head_first_python_chapter_4_20150426.jpg); 其实持久存储不仅仅包含文件,还包括数据库等,本章先介绍一部分,先熟悉一下。 熟悉python数据 #!/usr/bin/python # -*- coding: utf-8 -*- man = [] other =...
摘要:异常即使程序的语法是正确的,但是在运行的时候,也有可能发生错误,运行期监测到的错误称为异常。此时可以打印出错误信息,然后再次把异常抛出。这个子句将在子句没有发生任何异常的时候执行。异常类继承自,可以直接继承,或者间接继承。 1. 语法错误 Python 的语法错误被称为解析错,语法分析器会指出出错的代码行,并且在最先找到的错误的位置标记一个小小的箭头。 >>> while True ...
摘要:增加逻辑来处理首先通过观察方法对于不同的数据返回的值是不同的。所以需要加一些标记,标识数据不符合期望的格式时会出现数据无法正常访问时会出现。 1.介绍基础文件,输入,输出 open() 打开文件,一次传入一行数据,可以结合for循环和readline()来使用 close() 用来关闭open打开的文件 the_file = open(sketch.txt) the_file....
摘要:但是在调试之后,我们还需要手动删除语句,比较麻烦。关闭后,语句就不再生效。的好处有很多,一个是可以制定输出特定级别的信息。我们可以用对进行简单的配置。小于该的都会被忽略。但是在处理很长的代码的时候,显得效率低下。 我们在写代码的时候,往往会有一大堆错误。我们该如何调试呢? 用print语句打印 我们可以用print语句打印我们想要的内容,然后在输出中查看。 print hah 但是在调...
摘要:空函数如果想要定义一个什么都不做的函数,那么可以用语句。为函数添加参数检查我们对作一些改写。此时调用函数时传入错误的参数则会抛出。函数返回多个值支持返回多个值。 python中定义函数的关键词是def,例如定义一个叫my_function的函数我们可以这么定义, 其中括号内的x,y为传入的参数。 def my_function(): # function body 返回值 函数...
阅读 3172·2021-10-11 10:59
阅读 2950·2021-09-22 15:49
阅读 2947·2021-08-13 13:25
阅读 1489·2019-08-30 13:14
阅读 2570·2019-08-29 18:45
阅读 3196·2019-08-29 18:36
阅读 1737·2019-08-29 13:21
阅读 1403·2019-08-26 11:44