• 异常处理


    一、异常

    一般情况下,在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()
  • 相关阅读:
    SignalR2结合ujtopo实现拓扑图动态变化
    SignalR2简易数据看板演示
    使用SignalR 2进行服务器广播
    使用SignalR实时Web应用程序
    ZooKeeper安装
    MongoDB安装
    线程安全与非线程安全
    监听器,事件对象,事件源
    Graphics与Canvas
    JDialog
  • 原文地址:https://www.cnblogs.com/yoyovip/p/5753778.html
Copyright © 2020-2023  润新知