iOS开发人员如何学习Python编程20-异常捕获

108 阅读2分钟

这是我参与11月更文挑战的20天,活动详情查看:2021最后一次更文挑战

Python无法正常处理程序时就会发生一个异常,会影响程序的正常执行。

异常也是Python对象,表示一个错误。当Python脚本有发生异常的可能时,就需要捕获异常,避免程序终止执行,语法:

try:
    正常程序执行此块代码
except:
    抛出错误执行此代码块

捕获代码异常:

try:
    # 正常程序时执行代码块
    ipt = input("请输入:")
    ipt = float(ipt)
    print(ipt)

except:
    # 异常程序时执行代码块
    ipt = 1
    print(ipt)

异常类型捕获

仅仅捕获异常,虽然不会报错终止程序。但是无法记录下具体异常种类。如需记录下具体异常种类,则需要捕获该具体异常,语法:

try:
    pass
except 当前异常对象 as e:  # e = 当前异常对象 
    print(e)

捕获以下代码的异常类型并输出:

try:
    li = [1, 2, 3]
    li[3]  # IndexError
except IndexError as e:  
    print(e)           # list index out of range

⚠️注意: 该捕获方式仅能捕获IndexError这一类异常。那么实际上,这种细分的异常种类有很多,可以通过其共同父类Exception捕获输出:

try:
    # li = [1,2,3]
    # li[3]
    int('a')
except Exception as e:
    print(e)   		   # invalid literal for int() with base 10: 'a'

try-except-else

  • 如果抛出异常执行except内部代码
  • 如果程序正常执行else内部代码 try-finally
  • 不管程序有无发生异常,都将执行finally内部代码

主动触发异常

在实际开发中,在程序不满足某条件时,通常会主动抛出异常,语法:

raise Exception()

判断煎饼熟了没,当烹饪时间小于5时,则主动触发没熟异常;否则熟了:

def test(level):
    if level<5:
        raise Exception("没熟没熟")


try:
    test(5)               
except Exception as e:
    print(e)             
else:
    print("熟了 请吃")

自定义异常

当需要自定义满足一些规则时,就可以自定义异常。

自定义异常通过创建一个新的异常类,自定义名字与内容,并且需要继承Exception类实现:。

自定义OldCatError异常类:

class OldCatError(Exception):
    def __init__(self,msg):
        self.message = msg

    def __str__(self):
        return self.message


# e = OldCatError("我错了")
# print(e)

try:
    raise OldCatError("我错了")    
except OldCatError as e:
    print(e)

断言

assert断言用于判断一个表达式,当表达式条件为False时触发断言异常AssertionError,语法:

assert 断言

⚠️注意:断言用于强制用户服从,可捕获,但是一般不捕获。