python中异常处理机制

异常和异常处理

  • 异常就是错误
  • 异常会导致程序崩溃并且停止运行
  • 能监控并捕获到异常,将异常部位的程序进行修炼,使的程序正常运行

1. 异常

1.1. 语法
	try :
		<代码块> # 被try关键字检测并保护的业务代码
	except <异常的类型>:
		<代码块> # 代码块1出现错误后执行的代码块

比如正常情况下使用运行

print(1/0) # 会进行报错

error
使用try...except来进捕获异常

#coding:utf-8
def test():
	try:
		1/0
	except:
		print('o不能被1整除')
		# o不能被1整除
1.2 捕获通用异常
  • 在我们无法确定是那个异常的情况下使用的方法
try:
	<代码块>
except Exception as e  # EXception通用异常
	<异常代码块>

在这里插入图片描述

1.3 捕获具体异常
  • 在我们能够确定是那个异常的情况下使用的方法
  • except <具体的异常类型> as e
def Test ():
    try:
        1/0
    except ZeroDivisionError as e: # ZeroDivisionError:是python内置的具体异常:0不能被整除
        print(e)

Test()
# division by zero
1.4 捕获多个异常

当except代码后边的异常类型使用元组包裹起来,捕获到哪种抛哪种

def test1():
    try:
        print('hello')
        print(name)
    except (ZeroDivisionError, NameError) as e:
        print(e)
        print(type(e))
        print(dir(e))
test1()
1.5 异常中的finally
  1. 功能
    • 无论是否发送异常,一定会执行的代码块
    • 在函数中,即便在tryexcept中进行了return也依然会执行finall语法块
    • try语法至少要伴随exceptfinally中的一个
try:
	<代码块>
except: 
	<代码块>
finally<代码块>

finally中的代码块一定是执行的

2.自定义异常与抛出异常

自定义抛出异常函数-raise

将信息以报错的形式抛出(帮助我们主动抛出异常)
raise
让我们来看一个例子

def test(number):
    if number ==100:
        raise ValueError("number 不可以是100")
    return number
if __name__ =="__main__":
    result = test(50)
    print(result) # 正常执行
    result1 = test(100) # 报错
    print(result1)

error
那我们的try...excep能捕获到raise吗?

def test(number):
    if number ==100:
        raise ValueError("number 不可以是100")
    return number
def test1(number):
    try:
        return test(number)
    except ValueError as e :
        return e
if __name__ =="__main__":
    result = test1(50)
    result1 = test1(100)
    print(result)
    print(result1)
# 50 
# number不可以是100

从上述例子中,我们可以得知try..except是可以捕获到raise抛出的错误

3. 自定义异常类型

自定义异常类

#coding:utf-8
# 定义两个自定义异常类型
# 数字显示错误类
class NumberLimitError(Exception):
    def __init__(self,message):
        self.message = message
# 字符串限制错误类
class StringLimitError(Exception):
    def __init__(self,message):
        self.message = message
def test3(name):
    if name == "dewei":
        raise StringLimitError('dewei不可以被填写')
    return name
def test4(number):
    if number > 100:
        raise NumberLimitError("数字不可以大于100")
    return  number
if __name__ =="__main__":
	
    try:
        print(test3('dewei'))
    except StringLimitError as e:
        print(e)
    try:
        print(test4(101))
    except NumberLimitError as e:
        print(e)
'''
dewei不可以被填写
数字不可以大于100
'''
4. 断言—assert

用于判断一个表达式,在表达式条件为false的时候触发异常
基本功能和raise非常相似,但是比raise比较简单

用法
	assert expression
	# 参数:
	expression:表达式,一般是判断相等,或者判断是某种数据类型的bool判断的语句

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值