zoukankan      html  css  js  c++  java
  • 第五章---面向对象---1.软件开发/2.异常处理/3.try...except的详细用法

    1.软件开发
    软件的开发其实一整套规范,我们所学的只是其中的一小部分,一个完整的开发过程,需要明确每个阶段的任务,在保证一个阶段正确的前提下再进行下一个阶段的工作,称之为软件工程
    面向对象的软件工程包括下面几个部:
    1 面向对象分析(object oriented analysis ,OOA)
    2 面向对象设计(object oriented design,OOD)
    3 面向对象编程(object oriented programming,OOP)
    4 面向对象测试(object oriented test,OOT)
    5 面向对象维护(object oriendted soft maintenance,OOSM)
    #面向对象实战 参考 http://www.cnblogs.com/linhaifeng/articles/7341318.html
    #作业:http://www.cnblogs.com/linhaifeng/articles/6182264.html
    2.异常处理
    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 传入一个调用者不期望的值,即使值的类型是正确的
    更多异常:
    ArithmeticError
    AssertionError
    AttributeError
    BaseException
    BufferError
    BytesWarning
    DeprecationWarning
    EnvironmentError
    EOFError
    Exception
    FloatingPointError
    FutureWarning
    GeneratorExit
    ImportError
    ImportWarning
    IndentationError
    IndexError
    IOError
    KeyboardInterrupt
    KeyError
    LookupError
    MemoryError
    NameError
    NotImplementedError
    OSError
    OverflowError
    PendingDeprecationWarning
    ReferenceError
    RuntimeError
    RuntimeWarning
    StandardError
    StopIteration
    SyntaxError
    SyntaxWarning
    SystemError
    SystemExit
    TabError
    TypeError
    UnboundLocalError
    UnicodeDecodeError
    UnicodeEncodeError
    UnicodeError
    UnicodeTranslateError
    UnicodeWarning
    UserWarning
    ValueError
    Warning
    ZeroDivisionError

    4.异常处理 ---》 (不能让程序出错一点异常 就整个崩溃 需要检测异常 )
    4.1.对于错误发生的条件 如果是可以预知的 此时应该用if 判断去预防异常.
    age=input('>>:').strip()
    if age.isdigit(): # 发生异常是可预知的 把异常拒掉了
    age=int(age)
    4.2.对于错误发生的条件 如果是不可预知的 此时应该用异常处理机制try...except
    try...except 异常已经出现了 捕捉到 可以让程序继续运行
    try:
    ...
    except StopIteration:
    print('出错了')
    print('--------')
     1 # print('1')
     2 # int('asd')
     3 # print('2')
     4 
     5 # nameasa
     6 
     7 # l=[1,2,3]
     8 # l[100]
     9 
    10 # d={}
    11 # d['name']
    12 
    13 # class Foo:
    14 #     pass
    15 #
    16 # Foo.xxx
    17 
    18 # 1/0
    19 
    20 # for i in 3:
    21 #     pass
    22 
    23 # import time
    24 # time.sleep(1000)
    25 
    26 # ------------------------------
    27 # AGE=10
    28 # age=input('>>:').strip()
    29 # if age.isdigit():
    30 #     age=int(age)
    31 #     if age > AGE:
    32 #         print('猜大了')
    33 
    34 try:
    35     f=open('a.txt','r',encoding='utf-8')
    36     print(next(f),end='')
    37     print(next(f),end='')
    38     print(next(f),end='')
    39     print(next(f),end='')
    40     print(next(f),end='')
    41     print(next(f),end='')
    42     f.close()
    43 except StopIteration:
    44     print('出错了')
    45 
    46 print('--------')
    3.try...except的详细用法
      1.异常类只能用来处理指定的异常情况,如果非指定异常则无法处理
      2.多分支:被检测的代码块抛出的异常有多种可能性,并且我们需要针对每一种异常类型都定制专门的处理逻辑
      3.万能异常:Exception 被检测的代码块抛出的异常有多种可能性,并且我们针对所有的异常类型都只用一种处理逻辑就可以了,那就使用 Exception
      4.NameError/IndexError Exception 联合使用
      5.其他结构 try...except else finally #用来回收资源
      6.主动触发异常:raise 异常类型(值)
      7.自定义异常类型 ==》 类型=类
      8.断言assert 下面的代码 依赖上面的代码 的结果
      9.使用异常时注意:
      10.什么情况使用异常呢?
      1 # 1.异常类只能用来处理指定的异常情况,如果非指定异常则无法处理
      2 #     s1 = 'hello'
      3 #     try:
      4 #         int(s1)
      5 #     except IndexError as e: # 未捕获到异常,程序直接报错
      6 #         print e
      7 
      8 # 2.多分支:被检测的代码块抛出的异常有多种可能性,
      9 # 并且我们需要针对每一种异常类型都定制专门的处理逻辑
     10 # try:
     11 #     print('---->1')
     12 #     # name
     13 #     print('---->2')
     14 #     l=[1,2,3]
     15 #     l[100]
     16 #     print('---->3')
     17 #     d={}
     18 #     # d['name']
     19 #     print('---->4')
     20 #
     21 # except NameError as e:
     22 #     print('---->',e)
     23 #
     24 # except IndexError as e:
     25 #     print('---->', e)
     26 #
     27 # except KeyError as e:
     28 #     print('---->',e)
     29 #
     30 # print('after code')
     31 
     32 # 3.万能异常:Exception 被检测的代码块抛出的异常有多种可能性,
     33 # 并且我们针对所有的异常类型都只用一种处理逻辑就可以了,那就使用 Exception
     34 # try:
     35 #     print('---->1')
     36 #     # name
     37 #     print('---->2')
     38 #     l=[1,2,3]
     39 #     l[100]
     40 #     print('---->3')
     41 #     d={}
     42 #     # d['name']
     43 #     print('---->4')
     44 #
     45 # except Exception as e:
     46 #     print('异常发生',e)
     47 #
     48 # print('after code')
     49 
     50 # 4.NameError/IndexError  Exception 联合使用
     51 # try:
     52 #     print('---->1')
     53 #     # name
     54 #     print('---->2')
     55 #     l=[1,2,3]
     56 #     # l[100]
     57 #     print('---->3')
     58 #     d={}
     59 #     d['name']
     60 #     print('---->4')
     61 #
     62 # except NameError as e:
     63 #     print('---->',e)
     64 #
     65 # except IndexError as e:
     66 #     print('---->', e)
     67 #
     68 # except Exception as e:
     69 #     print('统一的处理方式',e)
     70 #
     71 # print('after code')
     72 
     73 # 5.其他结构 try...except  else  finally #用来回收资源
     74 # try:
     75 #     print('---->1')
     76 #     # name
     77 #     print('---->2')
     78 #     l=[1,2,3]
     79 #     # l[100]
     80 #     print('---->3')
     81 #     d={}
     82 #     # d['name']
     83 #     print('---->4')
     84 #
     85 # except NameError as e:
     86 #     print('---->',e)
     87 #
     88 # except IndexError as e:
     89 #     print('---->', e)
     90 #
     91 # except Exception as e:
     92 #     print('统一的处理方式',e)
     93 #
     94 # else:
     95 #     print('在被检测的代码块 没有发生异常时 执行')
     96 #
     97 # finally:  # 一般在回收资源 时使用
     98 #     print('不管被检测的代码块 有没有异常 都执行')
     99 #
    100 # print('after code')
    101 # --------------------------------
    102 # try:
    103 #     f=open('a.txt','r',encoding='utf-8')
    104 #     print(next(f), end='')
    105 #     print(next(f), end='')
    106 #     print(next(f), end='')
    107 #     print(next(f), end='')
    108 #     print(next(f), end='')
    109 # except Exception as e:
    110 #     print('统一的处理方式:',e)
    111 # finally:
    112 #     f.close()
    113 
    114 # 6.主动触发异常:raise  异常类型(值)
    115 # class People:
    116 #     def __init__(self,name,age):
    117 #         if not isinstance(name,str):
    118 #             raise TypeError('名字必须传入str')
    119 #         if not isinstance(age,int):
    120 #             raise TypeError('年龄必须传入int')
    121 #         self.name=name
    122 #         self.age=age
    123 
    124 # p=People('alice',18)
    125 # p=People(33,18)
    126 # p=People('alice','19')
    127 
    128 # 7.自定义异常类型 ==》 类型=类
    129 # class MyException(BaseException):
    130 #     def __init__(self,msg):
    131 #         super(MyException, self).__init__()
    132 #         self.msg=msg
    133 #
    134 #     def __str__(self):
    135 #         return '<%s>'%self.msg
    136 #
    137 # raise MyException('我自己的异常类型') # print(obj)
    138 
    139 # 8.断言assert  下面的代码 依赖上面的代码 的结果
    140 # info={}
    141 # info['name']='alice'
    142 # info['age']=18
    143 
    144 # if 'name' not in info:
    145 #     raise KeyError('必须有name这个key')
    146 # if 'age' not in info:
    147 #     raise KeyError('必须有age这个key')
    148 
    149 # assert ('name' in info) and ('age' in info)
    150 #
    151 # if info['name']=='alice' and info['age']>10:
    152 #     print('welcome')
    153 
    154 # 9.使用异常时注意:
    155 #    不要这样写 失去了写代码的意义
    156 #    try:
    157 #        pass
    158 #    except Exception:
    159 #        pass
    160 
    161 # 10.什么情况使用异常呢?
    162 # 1.错误发生的条件能明确的预知  if
    163 # 2.错误一定会发生,无法预知它发生的条件,不能让程序奔溃掉 才采用try...except
  • 相关阅读:
    Wireshark协议分析1
    网络的怎么连接的-浏览器
    navicat 快捷键
    jekins—持续集成
    【Back to Basics】查询区间 $a[0, r)$ 上大于等于 $k$ 的数有多少个
    【面试向】从洗牌算法说起
    【经典问题】maximum subset sum of vectors
    Codeforces 1209D Cow and Snacks
    Maximum XOR Sum 系列问题
    【C++ 补习】Copy Control
  • 原文地址:https://www.cnblogs.com/mumupa0824/p/9015267.html
Copyright © 2011-2022 走看看