Python基础教程:异常处理机制

一、常见的内置异常

print(name)
# # NameError: name 'name' is not defined

print(int('100a'))
# # ValueError: invalid literal for int() with base 10: '100a'

print('hello' + 1234)
# TypeError: can only concatenate str (not "int") to str

        还有:IndexError,IndentationError,AttributeError,ZeroDivisionError。。。

二、内置异常处理

        使用关键字 try except finally else 组合成不同的处理方式,其中 try 和 except 是核心。

# 内置异常处理:简单模式

语法格式:

try:
    代码1
except:
    代码2

# 内置异常处理:捕获多个异常结构

语法格式:

try:
    代码1
except XXX:
    代码2
except XXX:
    代码3
except XXX:
    代码4
# 内置异常处理:try... except... else 结构

语法格式:

try:
    代码1
except XXX:
    代码2
else:
    代码3
# 内置异常处理:try... except... else... finally 结构

语法格式:

try:
    代码1
except:
    代码2
else:
    代码3
finally:
    代码4

三、自定义异常

        raise 可以手动抛出异常(内置异常或者自定义异常都可以)。

def sub(a, b):
    if a < b:
        raise Exception('被减数不能小于减数')
    else:
        return a - b

try:
    print(sub(3, 10))
except Exception as e:
    print(e)

#【运行结果】:
# 被减数不能小于减数

        自定义异常,必须继承Exception类。

# 自定义异常的语法格式

class MyException(BaseException):
    def __init__(self, msg):
        self.msg = msg

    def __str__(self):
        return self.msg

try:
    raise MyException('异常消息字符串')
except MyException as e:
    print(e)

四、示例A

# 编写一个函数,接收两个参数 a 和 b,其中 a 和 b 都是数字;
# 要求:返回 a/b 的结果。
# 如果 b为0,则抛出一个自定义的异常“ZeroDivisionError”。

class ZeroDivisionError(BaseException):
    def __init__(self, msg):
        self.msg = msg

    def __str__(self):
        return self.msg

def func(a:int, b:int):
    if b == 0:
        raise ZeroDivisionError("除数不能为0")
    else:
        return a/b

try:
    print(func(9, 3))
    print(func(9, 0))
except ZeroDivisionError as e:
    print(e)

#【运行结果】:
# 3.0
# 除数不能为0

五、示例B(日志的简单应用)

        Python中,记录日志使用 logging 库,日志的级别从高到低分别为:

        (1)CRITICAL:系统崩溃级别的错误,必须立即处理;

        (2)ERROR:运行时的错误,可能导致程序无法正常运行;

        (3)WARNING:警告信息;

        (4)INFO:信息性消息,程序正常运行;

        (5)DEBUG:详细信息,通常在诊断问题时有用;

import logging

# 设置日志的打印级别
logging.basicConfig(level=logging.DEBUG)

logging.critical('\t这是一个 critical 信息')
logging.error('\t这是一个 error 信息')
logging.warning('\t这是一个 warning 信息')
logging.info('\t这是一个 info 信息')
logging.debug('\t这是一个 debug 信息')

#【运行结果】:
# CRITICAL:root:	这是一个 critical 信息
# ERROR:root:	这是一个 error 信息
# WARNING:root:	这是一个 warning 信息
# INFO:root:	这是一个 info 信息
# DEBUG:root:	这是一个 debug 信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值