异常处理

一、异常

一般情况下,在Python无法正常处理程序时就会发生一个异常,异常表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

通过try/except语句来捕获异常

 1 while True:
 2     num1 = input('num1:')
 3     num2 = input('num2:')
 4     try:
 5         num1 = int(num1)
 6         num2 = int(num2)
 7         result = num1 + num2
 8 
 9     except ValueError as e:  #传入一个调用者不期望的值,即使值的类型是正确的
10         print("value err",e)
11 
12     except Exception as e:  #捕获所有异常
13         print ('出现异常,信息如下:')
14         print (e)

try语法执行原理

如果try后的语句执行,出现异常就会执行第一个匹配该异常的except语句,如果不匹配则会搜索下一条语句,如果没有发生异常,执行else后的语句。

异常的种类

  AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
  IOError 输入/输出异常;基本上是无法打开文件
  ImportError 无法引入模块或包;基本上是路径问题或名称错误
  IndentationError 语法错误(的子类) ;代码没有正确对齐
  IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
  KeyError 试图访问字典里不存在的键
  KeyboardInterrupt Ctrl+C被按下
  NameError 使用一个还未被赋予对象的变量
  SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
  TypeError 传入对象类型与要求的不符合
  UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
    导致你以为正在访问它
  ValueError 传入一个调用者不期望的值,即使值的类型是正确的

 1 dic = ["nima", 'nimei']
 2 try:
 3     print(dic[10]) #出现异常
 4 except IndexError as e:
 5     print(e)
 6 else:
 7     print("Correct") #没有问题执行else
 8 finally:
 9     print("Anything is possible")  # 程序报错依然执行
10 #执行结果:
11 #list index out of range

二、自定义异常与断言

 1 class YoyoException(Exception):
 2     def __init__(self, msg):
 3         self.message = msg
 4     def __str__(self):
 5         return self.message
 6 a = 1
 7 try:
 8     assert a == 1 #断言
 9     #assert a == 2 #条件不成立报错
10     raise YoyoException('我的异常')
11 except YoyoException as e:
12     print(e)
1 try:
2     fh = open("testfile", "w")
3     fh.write("这是一个测试文件,用于测试异常!!")
4 
5 except IOError:
6     print ("Error: 没有找到文件或读取文件失败")
7 else:
8     print ("内容写入文件成功")
9     fh.close()
原文地址:https://www.cnblogs.com/yoyovip/p/5753778.html