首页 > 编程语言 > 详细

Python-异常处理

时间:2018-09-25 00:46:43      阅读:242      评论:0      收藏:0      [点我收藏+]

、异常 Exception

  错误 和 异常的区别:

    错误:Error

      • 逻辑错误:算法错误,加法写成了减法
      • 笔误:变量名写错了,语法错误
      • 函数或类使用错误,其实这也属于逻辑错误
      • 总之错误是可以避免的

    异常:Exception

      • 本意就是意外情况
      • 这有个前提,没有出现上面说的错误,也就是说程序写的没问题,但是在某些情况下,会出现一些意外,导致程序无法正常的执行下去
      • 例如open函数,操作一个文件,文件不存在,或创建一个文件已经存在,或访问一个网络文件突然断网了,这就是一场,是个意外的情况。
      • 异常是不可能避免的

    错误和异常:

      在高级编程语言中一般都有错误和异常的概念,异常是可以捕获,并被处理的,但是错误是不能被捕获的。

    举例:

      异常:

技术分享图片

      错误:

技术分享图片

    总结:

      一个健壮的程序

      尽可能的避免错误

      尽可能的捕获,处理各种异常。

      Python的特点是,将Error放到异常类中。

2、产生异常:

  产生:

    • raise 语句显式的抛出异常(手动抛出)
    • Python解释器自己检测到异常并引发它

  举例:

    解释器自动抛出:

技术分享图片

    手动抛出:

技术分享图片

    程序会在异常抛出的地方中断执行,如果不捕获,就会提前结束程序(其实是终止当前线程的执行)

    raise:

    raise 后面什么都没有,表示抛出最近一个被激活的异常,如果没有被激活的异常,则抛类型异常,这种但是很少使用。

    raise 后要求应该是BaseException类的子类或实例,如果是类,将被无参实例化

       raise IndexError() :无参构造 ----BaseException的派生类
          raise IndexError :无参构造 ----BaseException的派生类
          raise IndexError(‘index error‘) :有参构造 ----BaseException的派生类

 

3、异常的捕获:

  语法:

1 try:
2     待捕获异常的代码块,只要出现一条异常,就会终止,后面的执行,跳到except
3 except [异常类型]:
4     异常的处理代码块

 

  举例:

    1:

技术分享图片

    2:

技术分享图片

    3:

技术分享图片

 

4、异常类及继承层次:

  获取BaseException的子类:

技术分享图片
 1 def foo(cls, count=0):
 2    for i in cls.__subclasses__():
 3        if count == 0:
 4            print(count * ‘\t‘ +   ‘+-- ‘ + str(i))
 5        else:
 6             print((count - 1) * ‘\t‘+ ‘|‘ + ‘\t‘ +  ‘+-- ‘ + str(i))
 7        if  i.__subclasses__() :
 8            count += 1
 9            foo(i, count)
10        else:
11            continue
12 
13 
14 foo(BaseException)
View Code

  结果:

技术分享图片
 1 +-- <class ‘Exception‘>
 2 |    +-- <class ‘TypeError‘>
 3 |    +-- <class ‘StopAsyncIteration‘>
 4 |    +-- <class ‘StopIteration‘>
 5 |    +-- <class ‘ImportError‘>
 6     |    +-- <class ‘ModuleNotFoundError‘>
 7     |    +-- <class ‘zipimport.ZipImportError‘>
 8     |    +-- <class ‘OSError‘>
 9         |    +-- <class ‘ConnectionError‘>
10             |    +-- <class ‘BrokenPipeError‘>
11             |    +-- <class ‘ConnectionAbortedError‘>
12             |    +-- <class ‘ConnectionRefusedError‘>
13             |    +-- <class ‘ConnectionResetError‘>
14             |    +-- <class ‘BlockingIOError‘>
15             |    +-- <class ‘ChildProcessError‘>
16             |    +-- <class ‘FileExistsError‘>
17             |    +-- <class ‘FileNotFoundError‘>
18             |    +-- <class ‘IsADirectoryError‘>
19             |    +-- <class ‘NotADirectoryError‘>
20             |    +-- <class ‘InterruptedError‘>
21             |    +-- <class ‘PermissionError‘>
22             |    +-- <class ‘ProcessLookupError‘>
23             |    +-- <class ‘TimeoutError‘>
24             |    +-- <class ‘io.UnsupportedOperation‘>
25         |    +-- <class ‘EOFError‘>
26         |    +-- <class ‘RuntimeError‘>
27             |    +-- <class ‘RecursionError‘>
28             |    +-- <class ‘NotImplementedError‘>
29             |    +-- <class ‘_frozen_importlib._DeadlockError‘>
30             |    +-- <class ‘NameError‘>
31                 |    +-- <class ‘UnboundLocalError‘>
32                 |    +-- <class ‘AttributeError‘>
33                 |    +-- <class ‘SyntaxError‘>
34                     |    +-- <class ‘IndentationError‘>
35                         |    +-- <class ‘TabError‘>
36                     |    +-- <class ‘LookupError‘>
37                         |    +-- <class ‘IndexError‘>
38                         |    +-- <class ‘KeyError‘>
39                         |    +-- <class ‘encodings.CodecRegistryError‘>
40                         |    +-- <class ‘ValueError‘>
41                             |    +-- <class ‘UnicodeError‘>
42                                 |    +-- <class ‘UnicodeEncodeError‘>
43                                 |    +-- <class ‘UnicodeDecodeError‘>
44                                 |    +-- <class ‘UnicodeTranslateError‘>
45                                 |    +-- <class ‘io.UnsupportedOperation‘>
46                             |    +-- <class ‘AssertionError‘>
47                             |    +-- <class ‘ArithmeticError‘>
48                                 |    +-- <class ‘FloatingPointError‘>
49                                 |    +-- <class ‘OverflowError‘>
50                                 |    +-- <class ‘ZeroDivisionError‘>
51                                 |    +-- <class ‘SystemError‘>
52                                     |    +-- <class ‘encodings.CodecRegistryError‘>
53                                     |    +-- <class ‘ReferenceError‘>
54                                     |    +-- <class ‘MemoryError‘>
55                                     |    +-- <class ‘BufferError‘>
56                                     |    +-- <class ‘Warning‘>
57                                         |    +-- <class ‘UserWarning‘>
58                                         |    +-- <class ‘DeprecationWarning‘>
59                                         |    +-- <class ‘PendingDeprecationWarning‘>
60                                         |    +-- <class ‘SyntaxWarning‘>
61                                         |    +-- <class ‘RuntimeWarning‘>
62                                         |    +-- <class ‘FutureWarning‘>
63                                         |    +-- <class ‘ImportWarning‘>
64                                         |    +-- <class ‘UnicodeWarning‘>
65                                         |    +-- <class ‘BytesWarning‘>
66                                         |    +-- <class ‘ResourceWarning‘>
67                                         |    +-- <class ‘locale.Error‘>
68                                         |    +-- <class ‘warnings._OptionError‘>
69 +-- <class ‘GeneratorExit‘>
70 +-- <class ‘SystemExit‘>
71 +-- <class ‘KeyboardInterrupt‘>
View Code

技术分享图片

技术分享图片

 

 

 



        捕获特定异常:
            try:
                只要出现一条异常,就会终止当前try 里边的都终止,后面的 不会执行
            except FileNotFoundError: 捕获特定的异常!!!!!!!!!!!
                这里的代码,用来处理异常。

        sys.exit(0) 不管是几 都会触发一个异常。即便是0,但是很少调用。

        自定义的异常,继承Exception

        语法错误是无法捕获的!!!!

        多个异常捕获,父类的异常往下写。如果对某种异常有特定的处理,就提取出来,方到上面

        多个except,进入一个except,如果处理了,其他的except就不进去了。

        finally 里边的肯定执行

        多个return,压栈,第一个弹出的,作为返回值。

        一般return不放在finlly中,会压制异常

        raise和return 不推荐同时使用, 矛盾。

        else:没有异常,就执行,类似for循环,没有break 或return 就执行

 

Python-异常处理

原文:https://www.cnblogs.com/JerryZao/p/9697172.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!