python的异常

python的异常

1.1 定义

◇ 异常就是错误

◇ 异常会导致程序崩溃并停止运行

◇ 能监控并捕获到异常,将异常部位的程序进行修理使程序继续正常运行

1.2 异常的语法

vr6UBV.png

1.3 捕获通用异常

无法确定是那种异常情况下使用

vr6UBV.png

1.4 捕获具体异常

(性能好)确定是哪种异常的情况下使用的捕获方法

vr6a7T.png

其中如果try发现错误后,则会执行异常后面的程序,如果未发现错误,则会顺序执行下去

1.5 捕获多个异常

vr6Nn0.png

vr6Jcn.png

当except代码后面的异常类型使用元祖包裹起来,捕获哪种异常就抛哪种。


def upper(str_data):
    new_str = 'None'
    try:
        new_str = str_data.upper()
    except Exception as e:
        print('program goes wrong !',format(e))
    return new_str

# result = upper('devil')
result = upper(1)
print('result:',result)

def test():
    try:
        1/0
        print('hello')
    except ZeroDivisionError as e:
        print(e)

test()

def test1():
    name = 'none'
    try:
        1/0
        name = 'one'
        print(name)
    except ZeroDivisionError as e:
        print(e)

test1()

1.6 常用的异常合集

vr6wAU.png

vr6Bh4.png


class Test(object):
    pass

t = Test()
try:
    t.name
except AttributeError as e:
    print(e)

d = { 'name': '小慕'}
try:
    d['age']
except KeyError as e:
    print('没有对应的键:', e)

l = [1, 2, 3]
try:
    l[5]
except IndexError as e:
    print(e)

name = 'apple'
try:
    int(name)
except ValueError as e:
    print(e)

def test(a):
    return a
try:
    test()
except Exception as e:
    print(e)

vr60NF.png

1.7 异常中的finally

  1. finally,无论是否发生异常,一定会执行的代码块

  2. 在函数中,即便在try或except中进行了return也依然会执行finally语法块

  3. try语法块,至少要伴随except或finally中的一个

finally在2.5版本之前,finally需要独立使用,不可以和try配合,之后才演变成现在的模式。


def test1():
    try:
        1/0
    except Exception as e:
        print(e)
    finally:
        return 'finally'

result = test1()
print(result)

def test2():
    try:
        1/0
    except Exception as e:
        return e
    finally:
        print('finally')
    
print('--------')
result = test2()
print(result)

def test3():
    try:
        return 'try'
    except Exception as e:
        print('e')
    finally:
        print('finally test3')

print('========')
result = test3()
print(result)

vr6r9J.png

1.8 自定义异常与抛出异常

1.8.1 raise

将信息以报错的形式抛出

vr6ycR.png

vr66j1.png

def test(number):
    if number == 100:
        raise ValueError('number 不可以是100')
    return number

result = test(50)
print(result)

# result = test(100)
# print(result)

def test2(number):
    try:
        return test(number)
    except ValueError as e:
        return e

result = test2(100)
print(result)

def test3():
    raise 'wrong'

# test3()
def test4(name):
    if name == 'apple':
        raise Exception('apple不可以被填写')
    return name

test4('apple')

1.8.2 自定义异常类

  1. 继承基类----Exception
  2. 在构造函数中定义错误信息

vr6gnx.png

def test(number):
    if number == 100:
        raise ValueError('number 不可以是100')
    return number

result = test(50)
print(result)

# result = test(100)
# print(result)

def test2(number):
    try:
        return test(number)
    except ValueError as e:
        return e

result = test2(100)
print(result)

def test3():
    raise 'wrong'

# test3()
def test4(name):
    if name == 'apple':
        raise Exception('apple不可以被填写')
    return name

# test4('apple')

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

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

def test5(name):
    if name == 'apple':
        raise NameLimitError('apple 不可以被填写')
    return name

def test6(number):
    if(number >= 100):
        raise NumberLimitError('数字不可以大于100')
    return number

print('---------')

try:
    test5('apple')
except NameLimitError as e:
    print(e)

try:
    test6(100)
except NumberLimitError as e:
    print(e)

test5('apple')

1.9 断言

1.9.1 断言的功能

assert 用于判断一个表达式,在表达式条件为false的时候触发异常

用法

vr62B6.png

vr6RHK.png

1.10 debug

打断点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值