python基础-第九天-异常处理

1216-皇甫同学

发表文章数:34

热门标签

首页 » Python » 正文

异常的种类

异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。
所谓异常处理,就是指程序在出现问题时依然可以正确的执行剩余的程序,而不会因为异常而终止程序执行。

python基础-第九天-异常处理

异常的定位

当发生异常时,解释器会报相关的错误信息,并会在控制台打印出相关错误信息。我们 只需按照从上到下的顺序即可追溯(Trackback)错误发生的过程,最终定位引起错误的那一 行代码。
 

try…一个except结构

try..except是最常见的异常处理结构,结果如下:

try:
    被监控的可能引发异常的语句块
except BaseException [as e]:
    异常处理语句块

示例:

print('step 01')
try:
    print('step 02')
    a=1/0 #这里出现异常
    print('step 03')  #这里就被跳过,进入except部分
except:
    print('step 04')
print('step 05')
****结果如下***
step 01
step 02
step 04
step 05

小练习

循环输入数字,如果不是数字则处理异常,直到输入88,结束循环

while True:
    try:
        x=int(input('输入数字:'))
        if x==88:
            break
    except:
        print('请输入数字!!!')
print('程序结束。')

try…多个except结构

一般建议 尽量捕获可能出现的多个异常(按照先子类后父类的顺序),并且针对性的写出异常处理代 码。为了避免遗漏可能出现的异常,可以在最后增加 BaseException。

try:
    被监控的可能引起异常的语句块
except:
    处理except1的语句块
except:
    处理except2的语句块
....

try…except…else 结构

try: 
    a = input("请输入被除数:") 
    b = input("请输入除数:") 
    c = float(a)/float(b) 
except BaseException as e: 
    print(e) 
else: 
    print("除的结果是:",c)
****结果如下****
请输入被除数:100 
请输入除数:0 
floatdivisionbyzero

如果 try 块中没有抛出异常,则执行 else 块。如果 try 块中抛出异常,则执行 except 块,不执行 else 块。
 

try…except…finally 结构
 

try: 
    a = input("请输入一个被除数:") 
    b = input("请输入一个除数:") 
    c = float(a)/float(b) 
except BaseException as e: 
    print(e) 
else: 
    print(c) 
finally: 
    print("我是 finally 中的语句,无论发生异常与否,都执行!")
print("程序结束!")
****结果如下****
请输入被除数:99
请输入除数:0 
floatdivisionbyzero 
我是 finally 中的语句,无论是否发生异常都执行

finally 块无论是否发生异常都会被执行;通常用来释放 try 块中申请的资源。
 

return和异常的用法

由于 return 有两种作用:结束方法运行、返回值。我们一般不把 return 放到异常处理结构 中,而是放到方法最后。

常见异常

1.SyntaxError                语法错误

2.NameError                 尝试访问一个未定义的对象

3.ZeroDivisionError       零除错误

4.ValueError                  数值错误

5.TypeError                   类型错误

6.AttributeError             属性错误

7.IndexError                  索引越界异常

8.KeyError                    字典的关键字不存在

常见异常汇总

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

with上下文管理

with context_expr[as var]: 
    语句块

with 上下文管理可以自动管理资源,在 with 代码块执行完毕后自动还原进入该代码之前的 现场或上下文。不论何种原因跳出 with 块,不论是否有异常,总能保证资源正常释放。极 大的简化了工作,在文件操作、网络通信相关的场合非常常用。

自定义异常类

class AgeError (Exception):
    def __init__(self,errorInfo):
        Exception.__init__(self)
        self.errorInfo=errorInfo
    def __str__(self):
        return '年龄错误'
if __name__=="__main__":
    age=int(input('输入年龄:'))
    if age<1 or age>150:
        raise AgeError(age)
    else:
        print('正常的年龄:',age)
****结果如下****
输入年龄:151
Traceback (most recent call last):
  File "D:/学习/课程/基础知识/venv/yc02.py", line 10, in 
    raise AgeError(age)
__main__.AgeError: 年龄错误

 

标签:

拜师教育学员文章:作者:1216-皇甫同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《python基础-第九天-异常处理》 发布于2020-08-05

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录