python 异常处理。

异常处理

首先什么是异常?
异常时程序运行时发生的错误信号。
一个异常由三部分组成。
Traceback:表示异常的追踪信息(回溯信息)。
NameError:异常的类型。
value:异常的值。
异常处理
万能异常
异常处理的结构
主动触发异常
自定义异常
异常的部分种类
异常小结

异常处理

发生异常后对其进行处理。 使用try .... except : 结构。

try:

代码块

except 异常类型:

监测到有异常后要做的处理。

代码块监测到异常后对其做处理。

l1 = [('电脑',16998),('鼠标',59),('手机',8998)]
while 1:
    for key,value in enumerate(l1,1):
        print(key,value[0])
    try:
        num = input('>>>')
        price = l1[int(num)-1][1]
    except ValueError:
        print('请输入一个数字')
    except IndexError:
        print('请输入一个有效数字')
#这样通过异常处理可以使得代码更人性化,用户体验感更好。

万能异常

try:
代码块

except Exception as e:

异常后执行的逻辑。

Exception:代表所有的异常。

异常处理的结构

try:
代码块

except 异常类型:

代码块监测到异常后要执行的逻辑

…多分支

else:

代码块无异常执行的逻辑。

finally:

无论异常与否,都执行该部分,通常做清理工作。
def dealwith_file():
    try:
        f = open('file',encoding='utf-8')
        for line in f:
            int(line)
        return True
    except Exception as e:
        print(e)
        return False
    finally:
        '''不管try语句中的代码是否报错,都会执行finally分支中的代码'''
        '''去完成一些连接操作的收尾工作'''
        print('finally 被执行了')
        f.close()
ret = dealwith_file()
print(ret)

主动触发异常

try:
raise TypeError(“类型出错”)

except Except as e:

执行的逻辑。
使用raise抛出错误。

自定义异常

# 继承异常的基类
class EvaException(BaseException):
    def __init__(self,msg):
        self.msg=msg
    def __str__(self):
        return self.msg

try:
# 抛出异常
    raise EvaException('类型错误')
except EvaException as e:
    print(e)

异常的部分种类

"""
常见异常:
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
"""
"""
其他异常:
ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError
"""

异常小结

try:
    # 可能发生异常的代码
except 异常类型1 as 变量名:
    print(变量名) # 变量名存储的是具体的错误信息
except 异常类型2 as 变量名:
    print(变量名) # 变量名存储的是具体的错误信息
except Exception as 变量名:
    print(变量名) # 变量名存储的是具体的错误信息
else:
    print('如果以上代码没有发生异常以及异常处理工作就执行这里的代码')
    print('一般情况下else中的代码用来下结论')
    # logging模块
finally:
    print('不管代码是否有异常都会执行,且在函数中遇到return仍然会执行')
    print('一般情况下用于这个函数中资源的回收')
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值