python基础(十二)

异常

1,概念:程序出现不正常现象
java:异常和错误 Exception异常/Error错误 python:统称异常
2,常见异常类:
1)NameError:使用未定义变量
2)ZeroDivisionError:分母为零
3)SyntaxError:语法错误
4)IndexError:索引超出范围
5)KeyError:引用的字典键值错误
6)FileNotFoundError:找不到文件
7)AttributeError:类中没有属性
8)AssertionError:断言异常
9)IndentationError: expected an indented block:缩进错误
3,异常处理
try…except…else的语法:

    try:
       可能出现异常的代码
   except:
       捕获异常信息
   else:
       没有出现异常时调用
   finally:
       不管是否出现异常,总是运行 #一般执行关闭或者释放资源操作

else离不开except except可以没有else

try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印默认的出错信息)。
如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。

例:
打开一个文件,在该文件中的内容写入内容,且并未发生异常:

try:
    fh = open("d://testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print ("Error: 没有找到文件或读取文件失败")
else:
    print( "内容写入文件成功")
    fh.close()
内容写入文件成功

例:
打开一个文件,在该文件中的内容写入内容,但文件没有写入权限,发生了异常:

try:
    fh = open("e://testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print( "Error: 没有找到文件或读取文件失败")
else:
    print( "内容写入文件成功")
    fh.close()
Error: 没有找到文件或读取文件失败

捕获异常:
当发生异常时,我们就需要对异常进行捕获,然后进行相应的处理。python的异常捕获常用try…except…结构,把可能发生错误的语句放在try模块里,用except来处理异常,每一个try,都必须至少对应一个except。此外,与python异常相关的关键字主要有:

在这里插入图片描述
异常中的finally:

str1 = 'hello world'
try:
    int(str1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
else:
    print('try内没有异常')
finally:
    print('无论异常与否,都会执行我')

抛出异常 raise:

def fun(age):
    if 0<age<130:
        print("年龄是:",age)
    else:
        raise Exception("年龄过大")

fun(188)#数值在定义范围内则正常输出,否则触发异常
Traceback (most recent call last):
  File "D:/python pr/py2001.py", line 1675, in <module>
    fun(188)#数值在定义范围内则正常输出,否则触发异常
  File "D:/python pr/py2001.py", line 1673, in fun
    raise Exception("年龄过大")
Exception: 年龄过大

assert:断言

age = -1
assert  130 >= age >= 0,"年龄数值不合法"
Traceback (most recent call last):
  File "D:/python pr/py2001.py", line 1690, in <module>
    assert  130 >= age >= 0,"年龄数值不合法"
AssertionError: 年龄数值不合法

自定义异常

class AgeError(Exception):
    def __init__(self,info):
        self.info = info
    def show(self):
        print(self.info)

raise AgeError("年龄异常")
Traceback (most recent call last):
  File "D:/python pr/py2001.py", line 1638, in <module>
    raise AgeError("年龄异常")
__main__.AgeError: 年龄异常
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值