zoukankan      html  css  js  c++  java
  • 异常处理、网络编程

    一、什么是异常

    1、定义:

    异常就是程序运行发生错误,在程序出现错误是,则会产生一个异常,若程序没有处理它,则会抛出异常,程序也会随之终止

    2、一个异常分为三部分:

    异常的追踪信息

    异常的类型

    异常的值

    二、异常的种类

    1、语法异常

    这类异常应该在程序执行前就改正

    2、逻辑异常

    #索引错误
    # IndexError
    # l=['a','b']
    # l[100]
    
    #字典的索引key值出现错误
    # KeyError
    # d={'a':1}
    # d['b']
    
    #自定义类,以及引入模块属性错误
    # AttributeError:
    # class Foo:
    #     pass
    #
    # Foo.x
    # import os
    # os.aaa
    
    #分割出现错误,零不能做分母
    # ZeroDivisionError
    # 1 / 0
    
    #打开文件不存在错误
    # FileNotFoundError
    # f=open('a.txt','r',encoding='utf-8')
    
    #打开文件出现错误,程序抛出异常,终止程序,文件不能关闭,占用系统资源
    # ValueError: I/O operation on closed file.
    # f=open('a.txt','r',encoding='utf-8')
    # f.close()
    # f.readline()
    
    #值错误,int类型不能是字符串
    #ValueError: invalid literal for int() with base 10: 'aaaaa'
    # int('aaaaa')
    
    #类型错误
    # TypeError
    # for i in 333:
    #     pass
    
    #名字错误,无定义
    #NameError
    # x
    # func()
    
    
    
    
    # def func():
    #     import os
    #     os.xxxx
    #
    # func()

    三、异常的处理

    # 语法:
    
    # 单分支
    # try:
    #     print('start.....')
    #     x=1
    #     y
    #     l=[]
    #     l[3]
    #     d={'a':1}
    #     d['b']
    #     print('end....')
    # except NameError:
    #     print('变量名没有定义')
    #
    #
    # print('other.....')
    
    
    
    # 多分支
    # try:
    #     print('start.....')
    #     x=1
    #     # y
    #     l=[]
    #     l[3]
    #     d={'a':1}
    #     d['b']
    #     print('end....')
    # except NameError:
    #     print('变量名没有定义')
    # except KeyError:
    #     print('字典的key不存在')
    # except IndexError:
    #     print('索引超出列表的范围')
    #
    #
    # print('other.....')
    
    
    
    
    # 多种异常采用同一段逻辑处理
    # try:
    #     print('start.....')
    #     x=1
    #     # y
    #     l=[]
    #     # l[3]
    #     d={'a':1}
    #     d['b']
    #     print('end....')
    # except (NameError,KeyError,IndexError):
    #     print('变量名或者字典的key或者列表的索引有问题')
    
    
    # print('other.....')
    
    
    # 万能异常
    # try:
    #     print('start.....')
    #     x=1
    #     # y
    #     l=[]
    #     # l[3]
    #     d={'a':1}
    #     # d['b']
    #     import os
    #     os.aaa
    #     print('end....')
    # except Exception:
    #     print('万能异常---》')
    #
    #
    # print('other.....')
    
    
    
    # 获取异常的值,通过as赋值给变量e,通过打印就能看到返回结果
    # try:
    #     print('start.....')
    #     x=1
    #     y
    #     l=[]
    #     l[3]
    #     d={'a':1}
    #     d['b']
    #     import os
    #     os.aaa
    #     print('end....')
    # except Exception as e:
    #     print('万能异常---》',e)
    #
    #
    # print('other.....')
    
    
    
    
    # try:
    #     print('start.....')
    #     x=1
    #     # y
    #     l=[]
    #     l[3]
    #     d={'a':1}
    #     d['b']
    #     import os
    #     os.aaa
    #     print('end....')
    # except NameError as e:
    #     print('NameError: ',e)
    #
    # except KeyError as e:
    #     print('KeyError: ',e)
    #
    # except Exception as e:
    #     print('万能异常---》',e)
    #
    #
    # print('other.....')
    
    
    
    # try....else...
    # else: 不能单独使用,必须与except连用,意思是:else的子代码块会在被检测的代码没有出现过任何异常的情况下执行
    
    # try:
    #     print('start.....')
    #     # x=1
    #     # # y
    #     # l=[]
    #     # l[3]
    #     # d={'a':1}
    #     # d['b']
    #     # import os
    #     # os.aaa
    #     print('end....')
    # except NameError as e:
    #     print('NameError: ',e)
    #
    # except KeyError as e:
    #     print('KeyError: ',e)
    #
    # except Exception as e:
    #     print('万能异常---》',e)
    #
    # else:        #万能模板执行就不会执行else的内容,except类似于elif语句,一个成立,就不会执行其他的条件
    #     print('在被检测的代码块没有出现任何异常的情况下执行')
    # print('other.....')
    
    
    # try...finally....#无论有没有发生异常都会被执行
    # try:
    #     print('start.....')
    #     # x=1
    #     # # y
    #     # l=[]
    #     # l[3]
    #     # d={'a':1}
    #     # d['b']
    #     # import os
    #     # os.aaa
    #     print('end....')
    # except NameError as e:
    #     print('NameError: ',e)
    #
    # except KeyError as e:
    #     print('KeyError: ',e)
    #
    # except Exception as e:
    #     print('万能异常---》',e)
    #
    # else:
    #     print('在被检测的代码块没有出现任何异常的情况下执行')
    # finally:
    #     print('无论有没有异常发生,都会执行')
    # print('other.....')
    
    
    
    
    # finally的子代码块中通常放回收系统资源的代码
    # try:
    #     f=open('a.txt',mode='w',encoding='utf-8')
    #     f.readline()
    #
    # finally:
    #     f.close()        #有没有异常都会被执行,放回收资源的代码块,即使有异常文件也会被关闭
    #
    # print('other....')
    
    
    
    
    # 主动触发异常,条件不成立使用raise TypeError主动触发异常
    # raise TypeError('类型错误')
    
    
    
    # class People:
    #     def __init__(self,name):
    #         if not isinstance(name,str):
    #             raise TypeError('%s 必须是str类型' %name)
    #
    #         self.name=name
    #
    # p=People('egon')
    
    
    
    
    
    # 断言
    print('part1........')
    stus=['egon','alex','wxx','lxx']
    # stus=[]
    #
    
    # if len(stus) <= 0:
    #     raise TypeError           #TypeError后面内容可以没有
    assert len(stus) > 0            #条件满足则断言生效,生效一次
    #
    # print('part2.........')
    # print('part2.........')
    # print('part2.........')
    # print('part2.........')
    # print('part2.........')
    # print('part2.........')
    
    
    
    # 自定义异常
    # class RegisterError(BaseException):
    #     def __init__(self,msg,user):
    #         self.msg=msg
    #         self.user=user
    #
    #     def __str__(self):
    #         return '<%s:%s>' %(self.user,self.msg)
    #
    # raise RegisterError('注册失败','teacher')
    #
    
    
    
    
    
    # age=input('>>: ').strip() #age='aaa'
    #
    # if age.isdigit():
    #     age=int(age)
    #
    #     if age > 10:
    #         print('too big')
    #     elif age < 10:
    #         print('too small')
    #     else:
    #         print('you got it')

    四、什么时候用异常

  • 相关阅读:
    解决-webkit-box-orient: vertical;(文本溢出)属性在webpack打包后无法编译的问题
    消息框尖尖
    表单提交
    昨天看了一个大神的fix类,清晰了然
    使用cross-env解决跨平台设置NODE_ENV的问题
    axios 在Vue全局引入的方法
    vue自定义指令
    AMD/CMD/CommonJs到底是什么?它们有什么区别?
    artDialog.js的使用
    delegate-使用笔记
  • 原文地址:https://www.cnblogs.com/sui776265233/p/8876981.html
Copyright © 2011-2022 走看看