Python Basic - 异常(try....except.....else....finally)处理,assert 断言

什么时异常

java异常处理(较详细)
在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的。比如: 客户输入数据的格式, 读取文件是否存在, 网络是否始终保持通畅等等。

异常: 将程序执行中发生的不正常情况称为“异常” 。
(开发过程中的语法错误和逻辑错误不是异常)

异常为什么需要处理

异常不处理就会终止程序的运行,而有的异常并不影响程序运行结果,由于这类异常造成终止运行非常不划算,所以可以由程序员在编写程序时, 就考虑到错误的检测、 错误消息的提示, 以及错误的处理。

异常处理简单示例

while True:
    try:
        sequence = input("请输入你的序号:")
        i = int(sequence)
    except Exception as e:
        print(e)
        i = 1
    print(i)

"""
请输入你的序号:33
33
请输入你的序号:22
22
请输入你的序号:11
11
请输入你的序号:e
invalid literal for int() with base 10: 'e'
1
请输入你的序号:
"""

如上所示:整个小示例的逻辑就是让用户输入一段字段串,然后将输入的字符串强制成整型,如果是数字就可以转换成功没有异常,但是如果用户输入的是字母或者其它特殊字符,那么就会有异常。如果有异常就使用except抓住异常,如果成功抓住此异常,就能够定义如何处理。

这其实是一个固定格式写法
如果出错了,会创建一个Exception的对象,这个对象设置一个别名就是“e”,对象中封装了异常信息,可以拿出来异常信息。

异常的种类

每一种错误都有一种对象来表示错误的各类
Exception是最顶级的父类,其它的像indexError,ValueError这些都是Exception的子类

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

其它还有很多异常类型,此处不在列举,常用的就是上面几个

异常处理进阶示例

while True:
    try:
        sequence = input("请输入你的序号:")
        i = int(sequence)
    except IndexError as e:
        print("index error",e)
        i = 1
    except ValueError as e:
        print("value error",e)
        i = 1
    except Exception as e:
        print("Exception",e)
        i = 1
    else:
        print("else")
    finally:
        print("finally")
 
        

如果没有任何异常,会执行“else”代码块中的内容
finally:不管有没有异常,最后一定会执行一遍的代码块

主动触发一个异常

try:
    raise Exception("主动触发一个异常")
except Exception as e:
    print(e)

"""
主动触发一个异常
"""

自定义异常类

class SelfDefineError(Exception):
    def __init__(self,msg):
        self.message = msg
    def __str__(self):
        return self.message

try:
    raise SelfDefineError("自定义错误")
except SelfDefineError as e:
    print(e)

"""
自定义错误
"""

自己写一个类,然后继承自Exception。也可以使用try来捕获异常。

“assert”断言(用于强制用户服从,不服从就报错,并且可捕获,但一般不捕获)

条件成立就不执行,条件不成立就抛异常

print("代码第一句")
assert 1 == 1
print("断言后代码")

"""
代码第一句
断言后代码
"""

1 确实等于1,所以两者条件成立,条件成立即可继续往下执行

在这里插入图片描述

print("代码第一句")
assert 1 == 2
print("断言后代码")

"""
代码第一句
Traceback (most recent call last):
  File "E:/Python/Pycharm/Lab/week9/test.py", line 2, in <module>
    assert 1 == 2
AssertionError
"""

1不行于2,所以条件不成立,所以抛了一个异常"AssertionError"

断言(assert)的目的就是,满足条件就让你用,不然直接抛异常,我这个程序必需满足什么条件,满足你可以使用,不满足你不可以使用。可以捕获异常,但是一般并不捕获

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值