python抛出异常的关键字_python3-抛出、捕获异常

本文深入解析Python异常处理,涵盖异常追踪、类型识别、常见错误如索引和键错误、异常捕捉与多分支、万能异常及finally语句。还介绍了自定义异常、断言和定制错误处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

'''

异常:错误发生的信号,程序随之终止

三个部分:

1.traceback 异常的追踪信息(链接)

2.异常的类型

3.异常信息

错误两大类:

1.语法错误(运行前进行判定和修正)

2.逻辑错误

异常种类:

AttributeError 属性错误

试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x

IOError 输出错误

输入/输出异常;基本上是无法打开文件

ImportError 模块导入错误

无法引入模块或包;基本上是路径问题或名称错误

IndentationError 缩进错误

语法错误(的子类) ;代码没有正确对齐

IndexError 索引错误

下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]

KeyError 关键字错误

试图访问字典里不存在的键

KeyboardInterrupt 键盘中断错误

Ctrl+C被按下

NameError 名称错误

使用一个还未被赋予对象的变量

SyntaxError 语法错误

Python代码非法,代码不能编译(个人认为这是语法错误,写错了)

TypeError 类型错误

传入对象类型与要求的不符合

UnboundLocalError 局部变量错误

试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它

ValueError 值错误

传入一个调用者不期望的值,即使值的类型是正确的

异常处理:

#基本语法为

try:

被检测的代码块

except 异常类型 as 别名: #别名用来去除异常的值

try中一旦检测到异常后,执行的代码块。

else:

没有异常时执行

finally:

无论异常与否,都会执行该模块,通常是进行清理工作

try:

代码块1

代码块2

……

except StopIteration:

代码块

……

else:

代码块

……

finally:

代码块

……

断言:assert 条件语句

如果满足断言条件,继续运行;如果不满足,抛出异常(AssertionError)

'''

# 1.指定异常捕捉(单分支)

try:

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

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

l = [1, 2, 3]

l[100] # IndexError

# 异常被捕捉,不执行try下后续代码块

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

d = {'x': 1, 'y': 2}

d['z'] # KeyError

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

except IndexError as ie:

print('IndexError',ie)

print('other code')

# 2.异常处理多分支

try:

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

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

d = {'x': 1, 'y': 2}

d['z'] # KeyError

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

l = [1, 2, 3]

l[100] # IndexError

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

except IndexError as ie:

print('IndexError',ie)

except KeyError as ke:

print('KeyError',ke)

# 同上

except (IndexError,KeyError) as e:

print('Error',e)

print('other code')

# 3.万能异常 Exception:可以匹配任意类型的异常

try:

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

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

d = {'x': 1, 'y': 2}

d['z'] # KeyError

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

l = [1, 2, 3]

l[100] # IndexError

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

except Exception as e:

print('Error',e)

print('other code')

# 4.万能异常+多分支,实现指定错误指定处理。即:万能异常放最后捕获

try:

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

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

d = {'x': 1, 'y': 2}

d['z'] # KeyError

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

l = [1, 2, 3]

l[100] # IndexError

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

except IndexError as ie:

print('IndexError',ie)

except KeyError as ke:

print('KeyError',ke)

except Exception as e:

print('Error',e)

print('other code')

# 5.else和finally的使用和区别

try:

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

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

d = {'x': 1, 'y': 2}

d['z'] # KeyError

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

l = [1, 2, 3]

l[100] # IndexError

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

except IndexError as ie:

print('IndexError',ie)

except KeyError as ke:

print('KeyError',ke)

except Exception as e:

print('Error',e)

else:

print('else')

finally:

print('finally')

print('other code')

# 6.主动抛出异常

raise TypeError('类型错误')

# 7.触发异常

try:

raise TypeError('类型错误')

except Exception as e:

print(e)

# 8.自定义异常

class MyException(BaseException):

def __init__(self, msg):

self.msg = msg

def __str__(self):

return self.msg

try:

raise MyException('类型错误')

except MyException as me:

print(me)

# 断言:assert 条件语句

# 如果满足断言条件,继续运行;如果不满足,抛出异常(AssertionError)

print('1111')

l = [1,2,3,]

assert len(l)>5

print('22222222')

# 捕获异常

class People:

def __init__(self,name,age):

self.__name = name

self.__age = age

def get_interface(self):

print(self.__name,self.__age)

def set_inter(self,name,age):

try:

if not isinstance(name,str):

raise TypeError('名字必须是str类型')

if not isinstance(age,int):

raise TypeError('年龄必须是int类型')

except TypeError as te:

print(te)

return te

self.__name = name

self.__age = age

p1 = People(100,100)

p1.get_interface()

p1.set_inter(110,101)

p1.get_interface()

p1.set_inter('name1','age1')

p1.get_interface()

p1.set_inter('name2',19)

p1.get_interface()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值