python3学习笔记 错误处理

时间:2022-12-15 15:14:29

try

try:
    print('try...')
    r = 10 / 0
    print('result:', r)
except ZeroDivisionError as e:
    print('except:', e)
finally:
    print('finally...')
print('END')

 当我们认为某些代码可能会出错时,就可以用try来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块,执行完except后,如果有finally语句块,则执行finally语句块,至此,执行完毕。

try:
    print('try...')
    r = 10 / int('a')
    print('result:', r)
except ValueError as e:                #用一个except捕获ValueError
    print('ValueError:', e)
except ZeroDivisionError as e:             #另一个except捕获ZeroDivisionErrorprint('ZeroDivisionError:', e)
finally:
    print('finally...')
print('END')

int()函数可能会抛出ValueError,所以我们用一个except捕获ValueError,用另一个except捕获ZeroDivisionError

 

Python的错误其实也是class,所有的错误类型都继承自BaseException,所以在使用except时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽”。比如:

try:
    foo()
except ValueError as e:
    print('ValueError')
except UnicodeError as e:
    print('UnicodeError')

第二个except永远也捕获不到UnicodeError,因为UnicodeErrorValueError的子类,如果有,也被第一个except给捕获了。

常见的错误类型和继承关系:

BaseException
+-- SystemExit #系统结束
+-- KeyboardInterrupt #键盘中断 ctrl+D
+-- GeneratorExit #主动结束
+-- Exception #异常
      +-- StopIteration #迭代器错误
      +-- StandardError #标准错误
      |    +-- BufferError #buff错误
      |    +-- ArithmeticError #数学错误
      |    |    +-- FloatingPointError #浮点数错误
      |    |    +-- OverflowError #溢出
      |    |    +-- ZeroDivisionError #除零
      |    +-- AssertionError #断言错误
      |    +-- AttributeError #属性错误
      |    +-- EnvironmentError #环境错误
      |    |    +-- IOError #IO错误
      |    |    +-- OSError #操作系统错误
      |    |         +-- WindowsError (Windows) #windows错误
      |    |         +-- VMSError (VMS) #vms错误
      |    +-- EOFError #文件结束符eof错误
      |    +-- ImportError #导入错误
      |    +-- LookupError #查找错误
      |    |    +-- IndexError #下标错误
      |    |    +-- KeyError #key值错误
      |    +-- MemoryError #内存错误
      |    +-- NameError #命名错误
      |    |    +-- UnboundLocalError #无边界位置错误
      |    +-- ReferenceError #引用错误
      |    +-- RuntimeError #运行时错误
      |    |    +-- NotImplementedError #未实现错误
      |    +-- SyntaxError #语法错误
      |    |    +-- IndentationError #标识符错误
      |    |         +-- TabError #tab错误
      |    +-- SystemError #系统错误
      |    +-- TypeError #类型错误
      |    +-- ValueError #值错误
      |         +-- UnicodeError #unicode错误
      |              +-- UnicodeDecodeError #unicode解码错误
      |              +-- UnicodeEncodeError #unicode编码错误
      |              +-- UnicodeTranslateError #unicode翻译错误
      +-- Warning #警告
           +-- DeprecationWarning #弃用警告
           +-- PendingDeprecationWarning #即将弃用的警告
           +-- RuntimeWarning #运行时警告
           +-- SyntaxWarning #语法警告
           +-- UserWarning #用户警告
           +-- FutureWarning #功能警告
   +-- ImportWarning #导入警告
   +-- UnicodeWarning #unicode警告
   +-- BytesWarning #字节警告