zoukankan      html  css  js  c++  java
  • 面向对象

    面向对象 - 异常处理:
    1.什么是异常:异常是错误发生的信号,一旦程序出错,并且程序没有处理这个错误,那就会抛出异常,并且程序的运行随之终止

    2.错误分为两种:
    2.1.语法错误 程序执行前就要立刻改正过来
    2.2.逻辑错误:
    1.ValueError int('aaa')
    2.NameError name
    3.IndexError l=[1,2,3] l[100]
    4.KeyError d={} d['name']
    5.AttributeError class Foo:pass Foo.xxx
    6.ZeroDivisionError 1/0
    7.TypeError for i in 3:pass
    3.异常的种类:
    在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,一个异常标识一种错误
    常见异常:
    AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
    IOError 输入/输出异常;基本上是无法打开文件
    ImportError 无法引入模块或包;基本上是路径问题或名称错误
    IndentationError 语法错误(的子类) ;代码没有正确对齐
    IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
    KeyError 试图访问字典里不存在的键
    KeyboardInterrupt Ctrl+C被按下
    NameError 使用一个还未被赋予对象的变量
    SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
    TypeError 传入对象类型与要求的不符合
    UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
    ValueError 传入一个调用者不期望的值,即使值的类型是正确的
    更多异常:
    ......
    4.异常处理 ---》 (不能让程序出错一点异常 就整个崩溃 需要检测异常 )
    1.对于错误发生的条件 如果是可以预知的 此时应该用if 判断去预防异常.
    age=input('>>:').strip()
    if age.isdigit(): # 发生异常是可预知的 把异常拒掉了
    age=int(age)
    2.对于错误发生的条件 如果是不可预知的 此时应该用异常处理机制try...except
    try...except 异常已经出现了 捕捉到 可以让程序继续运行
    try:
    ...
    except StopIteration:
    print('出错了')
    print('--------')
    5.try...except 详细用法:
    1.异常类只能用来处理指定的异常情况,如果非指定异常则无法处理
    2.多分支:被检测的代码块抛出的异常有多种可能性,并且我们需要针对每一种异常类型都定制专门的处理逻辑
    3.万能异常:Exception 被检测的代码块抛出的异常有多种可能性,并且我们针对所有的异常类型都只用一种处理逻辑就可以了,那就使用 Exception
    4.NameError/IndexError Exception 联合使用 走了NameError/IndexError 就不会在走 Exception
    5.其他结构 try...except else finally #用来回收资源 else:没有发生异常时执行 finally:无论有没有异常都执行 这里一般用来回收资源f.close()
    6.主动触发异常:raise 异常类型(值) eg: raise TypeError('名字必须为str')
    7.自定义异常类型 ==》 类型 = 类 class MyException(BaseException):... raise MyException('自定义的异常')
    8.断言assert 下面的代码 依赖上面的代码 的结果 AssertionError
    9.使用异常时注意:代码不能随便乱用 try...except Exception .. 否则失去了写代码的意义
    10.什么情况使用异常呢?
    1.错误发生的异常能明确预知
    2.错误一定会发生,无法预知它发生的条件,不能让程序奔溃掉 才采用try...except

      1 # print('1')
      2 # int('q')
      3 # asd
      4 # l=[1,2,3]
      5 # print(l[100])
      6 # d={}
      7 # print(d['name'])
      8 # class Foo:
      9 #     pass
     10 # Foo.xx
     11 # 1/0
     12 # for i in 3:
     13 #     pass
     14 # import time
     15 # time.sleep(100)
     16 # int('as')
     17 # AGE=10
     18 # age=input('>>:').strip()
     19 # if age.isdigit():
     20 #     age=int(age)
     21 #     if age>AGE:
     22 #         print('猜大了')
     23 # f=open('a.txt','r',encoding='utf-8')
     24 # # print(f.__next__())
     25 # # print(f.__next__())
     26 # # print(f.__next__())
     27 # try:
     28 #     print(next(f),end='')
     29 #     print(next(f),end='')
     30 #     print(next(f),end='')
     31 #     print(next(f),end='')
     32 # except StopIteration as e:
     33 #     print(e,'出错了')
     34 #
     35 # print('-----------')
     36 
     37 # -----------------------
     38 # try...except...用法
     39 # 1.异常类只能用来处理指定的异常情况,如果非指定异常则无法处理
     40 # s='hello'
     41 # try:
     42 #     int(s)
     43 # except ValueError as e:
     44 #     print(e)
     45 # print('---------------')
     46 # 2.多分支:被检测的代码块抛出的异常有多种可能性,
     47 # 并且我们需要针对每一种异常类型都定制专门的处理逻辑
     48 # try:
     49 #     print('--1--')
     50 #     # name
     51 #     print('--2--')
     52 #     l=[1,2,3]
     53 #     # l[100]
     54 #     print('--3--')
     55 #     d={}
     56 #     # d['name']
     57 #     print('--4--')
     58 #
     59 # except NameError as e:
     60 #     print(e)
     61 #
     62 # except IndexError as e:
     63 #     print(e)
     64 #
     65 # except KeyError as e:
     66 #     print(e)
     67 #
     68 # print('----end----')
     69 # 3.万能异常:Exception 被检测的代码块抛出的异常有多种可能性,
     70 # 并且我们针对所有的异常类型都只用一种处理逻辑就可以了,那就使用 Exception
     71 # try:
     72 #     print('--1--')
     73 #     # name
     74 #     print('--2--')
     75 #     l=[1,2,3]
     76 #     l[100]
     77 #     print('--3--')
     78 #     d={}
     79 #     # d['name']
     80 #     print('--4--')
     81 # except Exception as e:
     82 #     print(e)
     83 # print('----end---')
     84 # 4.NameError/IndexError  Exception 联合使用
     85 # try:
     86 #     print('--1--')
     87 #     # name
     88 #     print('--2--')
     89 #     l=[1,2,3]
     90 #     l[100]
     91 #     print('--3--')
     92 #     d={}
     93 #     # d['name']
     94 #     print('--4--')
     95 # except NameError as e:
     96 #     print(e)
     97 # except IndexError as e:
     98 #     print(e)
     99 # except Exception as e:
    100 #     print('统一的处理方式',e)
    101 # print('----end---')
    102 # 5.其他结构 try...except  else  finally #用来回收资源
    103 # try:
    104 #     print('--1--')
    105 #     # name
    106 #     print('--2--')
    107 #     l=[1,2,3]
    108 #     # l[100]
    109 #     print('--3--')
    110 #     d={}
    111 #     # d['name']
    112 #     print('--4--')
    113 # except NameError as e:
    114 #     print(e)
    115 # except IndexError as e:
    116 #     print(e)
    117 # except Exception as e:
    118 #     print('统一的处理方式',e)
    119 # else:
    120 #     print('没有发生异常时执行')
    121 # finally:
    122 #     print('无论有没有异常 都执行')
    123 #
    124 # print('----end---')
    125 
    126 # try:
    127 #     f=open('a.txt','r',encoding='utf-8')
    128 #     print(next(f),end='')
    129 #     print(next(f), end='')
    130 #     print(next(f), end='')
    131 #     print(next(f), end='')
    132 #     print(next(f), end='')
    133 # except Exception as e:
    134 #     print('统一处理',e)
    135 # finally:
    136 #     f.close()  # 用来回收资源 表示回收的系统资源 f py会自动回收 os的资源需要f.close()
    137 # print(f.name)
    138 # 6.主动触发异常:raise  异常类型(值)
    139 # class People:
    140 #     def __init__(self,name,age):
    141 #         if not isinstance(name,str):
    142 #             raise TypeError('名字必须为str')
    143 #         if not isinstance(age,int):
    144 #             raise TypeError('年龄必须为int')
    145 #         self.name=name
    146 #         self.age=age
    147 #
    148 # p1=People('alice','12')
    149 # print(p1.name,p1.age)
    150 # 7.自定义异常类型 ==》 类型 = 类
    151 # class MyException(BaseException):
    152 #     def __init__(self,msg):
    153 #         super().__init__()
    154 #         self.msg=msg
    155 #
    156 #     def __str__(self):
    157 #         return '<%s>'%self.msg
    158 #
    159 # raise MyException('自定义的异常')
    160 # obj=MyException('自定义的异常')
    161 # print(obj)
    162 # 8.断言assert  下面的代码 依赖上面的代码 的结果
    163 # info={}
    164 # info['name']='alice'
    165 # # info['age']=18
    166 #
    167 # # if 'name' not in info:
    168 # #     raise KeyError('必须有name这个key')
    169 # # if 'age' not in info:
    170 # #     raise KeyError('必须有age这个key')
    171 #
    172 # assert ('name' in info) and ('age' in info)
    173 #
    174 # if info['name']=='alice' and info['age']>10:
    175 #     print('welcome')
    异常处理
    
    
  • 相关阅读:
    mdx中nonempty 和 non empty的区别
    shrink log和查询数据库 backup,restore,shrink 进度 和 还原历史 的sql (for sqlserver)re
    方差分析 概述
    从 高斯 到 正态分布 到 Z分布 到 t分布
    数据集市 数据仓库 Immon Kimball模型的概念说明
    【React Native 实战】微信登录
    【React Native 实战】商品分类
    一步步学习PHP笔记(李炎恢瓢城web俱乐部-多用户留言系统)01
    wampserver下打开phpMyAdmin出现403错误的问题解决方法
    windows 支持curl命令
  • 原文地址:https://www.cnblogs.com/alice-bj/p/8551696.html
Copyright © 2011-2022 走看看