设为首页 收藏本站
查看: 840|回复: 0

python-异常处理

[复制链接]
累计签到:81 天
连续签到:1 天
发表于 2018-4-22 07:52:26 | 显示全部楼层 |阅读模式

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

2.异常的种类:
    1.语法异常:
        这类异常应该在程序执行前改正,如忘写分号,括号等print('start....'
    2.逻辑异常:
        异常处理主要处理逻辑异常

3.一个异常分为三部分
    1.异常的追踪信息
    2.异常的类型
    3.异常的值

    例:
        Traceback (most recent call last):
          File"D:/Python/课程讲解/day24/异常处理.py", line 21, in <module>
            asd
        NameError: name 'asd' is not defined

#Traceback ===>异常的追踪信息
#NameError===>异常的类型
#name 'asd' is notdefined ====>异常的值


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



'''
#异常处理的语法:
try只是监测代码块,当有异常发生时,跳到except中判断是否有对应的异常类型;
    有则运行对应的异常处理逻辑,没有则抛出异常,结束程序;和if判断类似
运行完处理逻辑后,不会跳回try的代码块,接着执行后面的代码


#单分支
try:
    #代码
except 异常类型
    #异常处理逻辑
except 异常类型
    #异常处理逻辑
except 异常类型
    #异常处理逻辑

#异常合并
try:
    #代码
except (异常类型,异常类型,....)
    #异常处理逻辑

#万能异常处理;一般那放在最后,类似于if中的else
except Exception
    #异常处理逻辑

#处理异常的值

#as ,将异常的值赋值给变量
except 异常类型 as 变量名
    print(变量名)

try....except ..else:....
在被监测的代码块没有出现异常,会执行else中的代码

try:
    #代码
except 异常类型
    #异常处理逻辑
else:
    #代码
    try中没有出现异常是会执行


try:...except...finally....
被监测代码无论有没有异常,都会执行finally中的代码
finally中可以执行一些回收系统资源的代码,避免程序异常结束而没有释放调用的系统资源



书写顺序:
try:...except....else.....finally....


#主动触发异常
raise 异常类型(异常的值)

raiseTypeError("异常的值")


#断言
assert 条件  只有值大于0时,在执行后续代码,否则就抛出异常,结束程序



#自定义异常

BaseException异常类型的父类


class异常类名(BaseException):
    def __init__(self,msg,user):
        self.msg=msg
        self.user=user
    def __str__(self):
        return"<%s:%s>"%(self.msg,self.user)

raise异常类名("注册失败","teacher")
raise相当于print打印,会触发类中__str__()方法


'''

try:
    x=1
    y
    print(y)
    l=[]
    # l[3]
except NameError as a:
    print(a)
except Exception as a:
    print(a)
else:
    print("没有错误")
finally:
    print("无论有没有错误都会执行")



#主动触发异常
# raiseNameError("异常的值")
#===>NameError: 异常的值

# 断言

assert 3
print("qqq")#===>qqq
assert 1==1
print("qqq")#===>qqq
assert 1==2
print("qqq")#===>AssertionError

##自定义异常
classRegisterError(BaseException):
    def __init__(self,msg,user):
        self.msg=msg
        self.user=user
    def __str__(self):
        return"<%s:%s>"%(self.msg,self.user)

raiseRegisterError("注册失败","teacher")
#===>__main__.RegisterError:<注册失败:teacher>
# raise相当于print打印,会触发类中__str__()方法








运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-450220-1-1.html 上篇帖子: python正则模块 re 下篇帖子: 某男孩python自动化运维14期15--28周
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表