◎python-错误,异常与断言

目录

错误

1.语法错误:代码不符合编程语言的语法规则,导致代码无法正确解析和执行的错误【能在编辑器中被指出】

2.运行时错误:也被称为异常(Exception),是指在程序运行过程中发生的错误或异常情况,导致程序无法正常执行或产生意外的行为。【运行程序被中断】

3.逻辑错误:也被称为程序逻辑错误,是指程序中存在的与预期逻辑不一致或错误的情况。【程序不会报错,但与预期结果不符合】

异常

1. 捕获异常

2. 抛出异常【使用 raise 语句抛出一个指定的异常】

3. 自定义异常【继承基类Exception】

断言

一些常见的python内置异常类


错误

1.语法错误:代码不符合编程语言的语法规则,导致代码无法正确解析和执行的错误【能在编辑器中被指出】

常见的语法错误包括:

  1. 拼写错误:如拼写错误的关键字、函数名或变量名。

  2. 缺少或多余的符号:如缺少括号、引号或分号,或者使用了多余的符号。

  3. 整体结构错误:如缩进不正确、语句顺序错误等。

  4. 数据类型错误:如将一个字符串传递给需要数字的函数,或者进行不兼容的数据类型转换。

  5. 语法规则冲突:如条件语句中缺少必要的冒号、循环语句中缺少循环体等。

2.运行时错误:也被称为异常(Exception),是指在程序运行过程中发生的错误或异常情况,导致程序无法正常执行或产生意外的行为。【运行程序被中断】

常见的运行时错误有:

  1. 除0错误(ZeroDivisionError):当程序试图对一个数进行除法操作时,除数为0导致的错误。

  2. 索引错误(IndexError):当程序尝试访问列表或数组时超出其有效范围的索引编号。

  3. 类型错误(TypeError):当程序使用不匹配或不支持的数据类型进行操作时的错误。

  4. 文件操作错误(IOError):例如尝试打开或读取不存在的文件。

  5. 内存错误(MemoryError):当程序试图申请过大的内存空间,超出可用的系统内存。

3.逻辑错误:也被称为程序逻辑错误,是指程序中存在的与预期逻辑不一致或错误的情况。【程序不会报错,但与预期结果不符合】

常见的逻辑错误:

  1. 错误的条件判断:程序使用了错误的条件或错误的逻辑关系来进行判断,导致程序不按预期的方式进行分支、循环或判断。

  2. 错误的变量赋值:错误地对变量赋值,导致程序在后续的计算或决策中产生错误结果。

  3. 错误的循环控制:循环的起始、结束条件或循环中的计算错误,导致循环无法正确执行或产生错误的迭代次数。

  4. 错误的算法设计:算法本身存在错误或不完整,导致计算的结果与预期不符。

异常

1. 捕获异常
try:
    觉得会出错的语句
except:
    捕获异常后执行的操作
else:
    没有错误时执行的操作
finally:
    无论是否捕获异常均会执行

1. try...except... 【分母为0,打印错误】

 这条只能看到try-except中间出错,并不能看出是什么错误

try:
    a=9/0
except:
    print('错误')
print('结束')

 当给except搭配Exception【Exception 是所有内置异常类的基类】时,可以打印出报错信息

try:
    a=9/0
except Exception as e:
    '''
    使用了异常类作为异常处理器,并将捕获的异常实例赋值给变量 e。
    Exception 是Python中的基本异常类,它可以捕获几乎所有常见的异常。
    当你希望捕获所有类型的异常时,可以使用 Exception。
    然而,在实际应用中,最好根据具体情况选择更具体的异常类进行捕获,以便更精确地处理特定类型的异常。
    '''
    print(e)
print('结束')

'''
division by zero
结束
'''

2. 多个except

捕获异常当然捕获的越精细越好,不同的结果执行不同的操作。

l=[1,2,3]
try:
    b='l'+9#先捕获此条异常
    print(l[2]/0)#不会执行
    print(l[7])
except ZeroDivisionError:#内置异常类,捕获除0错误
    print('分母不能为0')
except IndexError:#内置异常类,捕获索引错误
    print('索引错误')
except Exception as e:#设置该条语句是为了捕获在预期之外的异常
    print(e)
print('结束')

'''
can only concatenate str (not "int") to str
结束
'''

try下面一共有三条语句,从打印的结果可以看到是类似if...elif的形式,只要符合条件后续均不在执行,跳出try...except语句【try逐行检测,先检测的先报错】

异常可以拆开写,当然也能合起来写,只需将多个内置异常类放入元组中即可

except (ZeroDivisionError,IndexError):
    print('分母不能为0 或 索引错误')
2. 抛出异常【使用 raise 语句抛出一个指定的异常】

每次执行raise语句,都只能引发一次执行的异常,一般都在if语句后,if为真则执行raise

raise [exceptionName[(reason)]]
其中[]括起来的为可选参数,其作用是指定抛出的异常,以及异常信息的相关描述。
如果可选参数全部省略,则rasie会把当前错误原样抛出
如果省略(reason),则在抛出异常时,将不附带任何异常描述信息

抛出异常不会处理异常【会中断程序】

搭配if,如果字符不是数字则抛出异常

a='7436a63'

if not a.isdigit():
    raise Exception('这串字符不是数字')
print('这是数字')
3. 自定义异常【继承基类Exception】

python中异常库中的异常有限,这时就需要自定义异常

检测字符中是否有大写字母存在,若存在则抛出异常

class UP(Exception):
    pass

words = ['en', 'mee', 'min', 'MO']
for word in words:
    if word.isupper():  # 检测字符是否都为大写
        raise UP(word)

上面仅仅只是抛出异常,使用的是if来判断是否不符合预期,不符合预期值则抛出异常

捕获自定义异常


class UP(Exception):
    def __init__(self,word):
        self.word=word
    def __str__(self):
        return self.word+'全是大写'

words = ['en', 'Ayu', 'min', 'MO']

try:
    for word in words:
        if word.isupper():  # 检测字符是否都为大写
            raise UP(word)
except UP as e:
    print(e)
print('结束')

在raise抛出异常后,被try-except捕获异常并交给UP类,__init__【构造方法,创建类的实例】获取异常数据,__str__【方法用于返回对象的描述信息,如果不使用__str__方法,直接print,或者return,返回的是对象的内存地址】,UP类传递出错误信息给e,打印e

断言

是一种在程序中用于检查和验证特定条件是否成立的机制。它用于确保程序在运行时满足预期的条件,如果条件不成立,断言会触发异常或错误消息来指示问题。【判定为假中断程序】

断言通常具有以下特点:

  1. 条件检查:断言会对一个布尔表达式进行评估,并检查是否为真。如果条件为假,断言将被认为是失败的。

  2. 触发异常:当断言失败时,通常会抛出一个特定的异常,例如AssertionError。这会导致程序停止执行,并在控制台或日志中显示错误消息。

  3. 调试信息:断言通常允许程序员提供与断言相关的调试信息,以便更好地理解断言的目的和失败的原因。

 assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常【AssertionError】

assert expression
a=9
b=-9
assert a+b,'该数相加为0'#若断言为真则继续执行,否则结束程序并打印逗号后面的话
c=a+b
print(c)

一般用于判断申请内存是否足够

一些常见的python内置异常类

异常名称描述
BaseException所有异常的基类
SystemExit解释器请求退出
KeyboardInterrupt用户中断执行(通常是输入^C)
Exception常规错误的基类
StopIteration迭代器没有更多的值
GeneratorExit生成器(generator)发生异常来通知退出
SystemExitPython 解释器请求退出
StandardError所有的内建标准异常的基类
ArithmeticError所有数值计算错误的基类
FloatingPointError浮点计算错误
OverflowError数值运算超出最大限制
ZeroDivisionError除(或取模)零 (所有数据类型)
AssertionError断言语句失败
AttributeError对象没有这个属性
EOFError没有内建输入,到达EOF 标记
EnvironmentError操作系统错误的基类
IOError输入/输出操作失败
OSError操作系统错误
WindowsError系统调用失败
ImportError导入模块/对象失败
KeyboardInterrupt用户中断执行(通常是输入^C)
LookupError无效数据查询的基类
IndexError序列中没有没有此索引(index)
KeyError映射中没有这个键
MemoryError内存溢出错误(对于Python 解释器不是致命的)
NameError未声明/初始化对象 (没有属性)
UnboundLocalError访问未初始化的本地变量
ReferenceError弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError一般的运行时错误
NotImplementedError尚未实现的方法
SyntaxErrorPython 语法错误
IndentationError缩进错误
TabErrorTab 和空格混用
SystemError一般的解释器系统错误
TypeError对类型无效的操作
ValueError传入无效的参数
UnicodeErrorUnicode 相关的错误
UnicodeDecodeErrorUnicode 解码时的错误
UnicodeEncodeErrorUnicode 编码时错误
UnicodeTranslateErrorUnicode 转换时错误
Warning警告的基类
DeprecationWarning关于被弃用的特征的警告
FutureWarning关于构造将来语义会有改变的警告
OverflowWarning旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning关于特性将会被废弃的警告
RuntimeWarning可疑的运行时行为(runtime behavior)的警告
SyntaxWarning可疑的语法的警告
UserWarning用户代码生成的警告
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值