python基础篇--day13

23 篇文章 0 订阅
21 篇文章 1 订阅

异常处理

格式

当程序运行时,出现的一些问题(语法问题,逻辑问题等),程序则会抛出一个错误,程序终止。异常处理就是把可能出错的代码包围起来,让其抛出错误并接收错误,告诉计算机当程序产生错误时,你应该怎么做,而不会让程序终止。

try:
	可能出错的代码
except [异常类型]:
	出错后执行的代码

异常类型
TypeError :类型错误
ZeroDivisionError:除数不能为零
Exception:错误类型都继承于该类,即任意的错误都可以用他来接收

   try:
       可能出错的代码
   except [异常1]:
        	出错后执行的代码
    except [异常2]:
        	出错后执行的代码
     except Exception as e: # 一般放在最后面,用来接收所有错误 输出  e[e可以为任何变量名]  即为错误的内容
        	出错后执行的代码

如果想要知道抛出的异常,是什么信息,则可以使用上面的方法

   try:
       可能出错的代码
   except [异常1]:
        	出错后执行的代码
    except [异常2]:
        	出错后执行的代码
     else:
     		try里面的语句没有抛出异常,则会执行else里面语句



   try:
       可能出错的代码
   except [异常1]:
        	出错后执行的代码
    except [异常2]:
        	出错后执行的代码
     else:
     		try里面的语句没有抛出异常,则会执行else里面语句
     finally:
     		无论代码是否报错,代码一定会运行(必执行代码),就算提前有return也会延迟return,执行finally

如果代码中有返回值+finally,则肯定会执行finally里面的语句。
finally的使用场景,一般在数据库,文件操作、联网操作等时,在此期间如果产生错误则需要执行finally,关闭数据库等操作,防止占用内存的额外空间。

异常的传递

在函数调用时,如果函数多次嵌入调用函数,可以在最外层调用函数出添加try,函数会由里到外往外抛出错误,可在最外层接收异常,然后处理。

import random


def func(list1):
    sum = 0
    for a in list1:
        print(a)
        sum += a  # raise


def get_random():
    try:
        list1 = []
        for i in range(5):
            ran = random.randint(1, 10)
            list1.append(ran)
        list1.append('9')
        func(list1)
    except Exception as err:
        print('+++++++++++++++++>', err)


try:
    get_random()
except Exception as err:
    print(err)

print('==========>')

结果:

10
9
6
4
3
9
+++++++++++++++++> unsupported operand type(s) for +=: ‘int’ and ‘str’
==========>

内层函数已经接收了异常处理,则外层的try就不会再次处理异常了。

自定义异常

格式:

class XXXError(Exception):
		def __init__(self,*args,**kwargs):
					pass

使用:

raise xxxError("错误内容")

处理异常:

try:
		异常代码
except:
		处理异常

# 自定义异常
class UserNameError(Exception):
    def __init__(self, *args, **kwargs):
        pass


class PasswordError(Exception):
    def __init__(self, *args, **kwargs):
        pass


def register():
    username = input('输入用户名:')
    # 名字长度>=6,不能数字开头  '2'
    if len(username) < 6 or username[0].isdigit():
        # 用户名定义出错
        raise UserNameError('用户名格式错误')
    else:
        print('用户名合法')
        password = input('输入密码:')
        if 10 >= len(password) >= 6:
            print('注册成功')
        else:
            raise PasswordError('密码格式错误')


# 调用函数
try:
    register()
except Exception as err:
    print(err)

print('----->123')


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只敲代码的大脸猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值