Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >python 异常处理

python 异常处理

原创
作者头像
ruochen
修改于 2021-02-22 02:16:07
修改于 2021-02-22 02:16:07
2.4K0
举报

异常

  • 广义上的错误分为错误和异常
  • 错误指的是可以人为避免
  • 异常是指在语法逻辑正确的而前提下,出现的问题
  • python中,异常是一个类,可以处理和使用

异常的分类

代码语言:txt
AI代码解释
复制
BaseException 所有异常的基类
代码语言:txt
AI代码解释
复制
Exception 常见错误的基类
代码语言:txt
AI代码解释
复制
ArithmeticError 所有数值计算错误的基类
代码语言:txt
AI代码解释
复制
Warning 警告的基类
代码语言:txt
AI代码解释
复制
AssertError 断言语句(assert)失败
代码语言:txt
AI代码解释
复制
AttributeError 尝试访问未知的对象属性
代码语言:txt
AI代码解释
复制
DeprecattionWarning 关于被弃用的特征的警告
代码语言:txt
AI代码解释
复制
EOFError 用户输入文件末尾标志EOF(Ctrl+d)
代码语言:txt
AI代码解释
复制
FloattingPointError 浮点计算错误
代码语言:txt
AI代码解释
复制
FutureWarning 关于构造将来语义会有改变的警告
代码语言:txt
AI代码解释
复制
GeneratorExit generator.close()方法被调用的时候
代码语言:txt
AI代码解释
复制
ImportError 导入模块失败的时候
代码语言:txt
AI代码解释
复制
IndexError 索引超出序列的范围
代码语言:txt
AI代码解释
复制
KeyError 字典中查找一个不存在的关键字
代码语言:txt
AI代码解释
复制
KeyboardInterrupt 用户输入中断键(Ctrl+c)
代码语言:txt
AI代码解释
复制
MemoryError 内存溢出(可通过删除对象释放内存)
代码语言:txt
AI代码解释
复制
NamerError 尝试访问一个不存在的变量
代码语言:txt
AI代码解释
复制
NotImplementedError 尚未实现的方法
代码语言:txt
AI代码解释
复制
OSError 操作系统产生的异常(例如打开一个不存在的文件)
代码语言:txt
AI代码解释
复制
OverflowError 数值运算超出最大限制
代码语言:txt
AI代码解释
复制
OverflowWarning 旧的关于自动提升为长整型(long)的警告
代码语言:txt
AI代码解释
复制
PendingDeprecationWarning 关于特征会被遗弃的警告
代码语言:txt
AI代码解释
复制
ReferenceError 弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象
代码语言:txt
AI代码解释
复制
RuntimeError 一般的运行时错误
代码语言:txt
AI代码解释
复制
RuntimeWarning 可疑的运行行为(runtime behavior)的警告
代码语言:txt
AI代码解释
复制
StopIteration 迭代器没有更多的值
代码语言:txt
AI代码解释
复制
SyntaxError Python的语法错误
代码语言:txt
AI代码解释
复制
SyntaxWarning 可疑的语法的警告
代码语言:txt
AI代码解释
复制
IndentationError 缩进错误
代码语言:txt
AI代码解释
复制
TabError Tab和空格混合使用
代码语言:txt
AI代码解释
复制
SystemError Python编译器系统错误
代码语言:txt
AI代码解释
复制
SystemExit Python编译器进程被关闭
代码语言:txt
AI代码解释
复制
TypeError 不同类型间的无效操作
代码语言:txt
AI代码解释
复制
UnboundLocalError 访问一个未初始化的本地变量(NameError的子类)
代码语言:txt
AI代码解释
复制
UnicodeError Unicode相关的错误(ValueError的子类)
代码语言:txt
AI代码解释
复制
UnicodeEncodeError Unicode编码时的错误(UnicodeError的子类)
代码语言:txt
AI代码解释
复制
UnicodeDecodeError Unicode解码时的错误(UnicodeError的子类)
代码语言:txt
AI代码解释
复制
UserWarning 用户代码生成的警告
代码语言:txt
AI代码解释
复制
ValueError 传入无效的参数
代码语言:txt
AI代码解释
复制
ZeroDivisionError 除数为零
代码语言:txt
AI代码解释
复制
l = [1,2,3,4,5]
# 除零错误
num = int(input("Please input your num: "))
print(100/num)
代码语言:txt
AI代码解释
复制
Please input your num: 0
代码语言:txt
AI代码解释
复制
---------------------------------------------------------------------------
代码语言:txt
AI代码解释
复制
ZeroDivisionError                         Traceback (most recent call last)
代码语言:txt
AI代码解释
复制
<ipython-input-1-8abb196ce2aa> in <module>
代码语言:txt
AI代码解释
复制
      2 # 除零错误
代码语言:txt
AI代码解释
复制
      3 num = int(input("Please input your num: "))
代码语言:txt
AI代码解释
复制
----> 4 print(100/num)
代码语言:txt
AI代码解释
复制
ZeroDivisionError: division by zero

异常处理

  • 不能保证程序永远正确运行
  • 但是,必须保证程序在最坏的情况下得到的问题被妥善管理
  • python的异常处理模块全部语法为:
代码语言:txt
AI代码解释
复制
    try:
代码语言:txt
AI代码解释
复制
        尝试实现某个操作,
代码语言:txt
AI代码解释
复制
        如果没有出现异常,任务就可以完成
代码语言:txt
AI代码解释
复制
        如果出现异常,将异常从当前代码块扔出去尝试解决异常
代码语言:txt
AI代码解释
复制
    except 异常类型1:
代码语言:txt
AI代码解释
复制
        解决方案1:用于尝试在此处处理异常解决问题
代码语言:txt
AI代码解释
复制
    except 异常类型2:
代码语言:txt
AI代码解释
复制
        解决方案2:用于尝试在此处处理异常解决问题
代码语言:txt
AI代码解释
复制
    except (异常类型1,异常类型2...):
代码语言:txt
AI代码解释
复制
        解决方案:针对多个异常使用相同的处理方式
代码语言:txt
AI代码解释
复制
    except:
代码语言:txt
AI代码解释
复制
        如果没有出现任何异常,将会执行此处代码
代码语言:txt
AI代码解释
复制
    finally:
代码语言:txt
AI代码解释
复制
        有没有异常都要执行的代码
  • 流程
    1. 执行try下面的语句
    2. 如果出现异常,则在except语句里查找对应异常病进行处理
    3. 如果没有出现异常,则执行else语句内容
    4. 最后,不管是否出现异常,都要执行finally语句
  • 除except(最少一个)以外,else和finally可选
代码语言:txt
AI代码解释
复制
# 简单异常案例
try:
    num = int(input("Please input your number:"))
    rst = 100/num
    print("计算结果是:{}".format(rst))
except:
    print("输入错误")
    # exit是退出程序的意思
    exit()
代码语言:txt
AI代码解释
复制
Please input your number:0
代码语言:txt
AI代码解释
复制
输入错误
代码语言:txt
AI代码解释
复制
# 简单异常案例
# 给出提示信息
try:
    num = int(input("Please input your number:"))
    rst = 100/num
    print("计算结果是:{}".format(rst))
# 捕获异常后,把异常实例化,出错信息会在实例里
# 注意以下写法
# 以下语句是捕获ZeroDivisionError异常并实例化实例e
except ZeroDivisionError as e:
    print("输入错误")
    print(e)
    # exit是退出程序的意思
    exit()
代码语言:txt
AI代码解释
复制
# 简单异常案例
# 给出提示信息
try:
    num = int(input("Please input your number:"))
    rst = 100/num
    print("计算结果是:{}".format(rst))
# 如果是多种error的情况
# 需要把越具体的错误,越往前放
# 在异常类继承关系中,越是子类的异常,越要往前放,
# 越是父类的异常,越要往后放 、

# 在处理异常的时候,一旦拦截到某一个异常,则不再继续往下查看,直接进行下一个
# 代码,即有finally则执行finally语句,否贼就执行下一个大的语句
except ZeroDivisionError as e:
    print("输入错误")
    print(e)
    # exit是退出程序的意思
    exit()
except NameError as e:
    print("名字起错了")
    print(e)

except AttributeError as e:
    print("属性错误")
    print(e)
    exit()
# 常见错误的基类
# 如果写下面这句话,常见异常都会拦截住
# 而且下面这句话一定是最后一个excepttion
except Exception as e:
    print("我也不知道就出错了")
    print(e)

except ValueError as e:
    print("NO>>>>>>>>>>>")
print("hahaha")
代码语言:txt
AI代码解释
复制
Please input your number:ffff
代码语言:txt
AI代码解释
复制
我也不知道就出错了
代码语言:txt
AI代码解释
复制
invalid literal for int() with base 10: 'ffff'
代码语言:txt
AI代码解释
复制
hahaha

用户手动引发异常

  • 当某些情况,用户希望自己引发一个异常的时候,可以使用
  • raise 关键字来引发异常
代码语言:txt
AI代码解释
复制
# raise 案例
try:
    print("I love you")
    print(3.1415926)
    # 手动引发一个异常
    # 注意语法:raise ErrorClassName
    raise ValueError
    print("还没完呀")
except NameError as e:
    print("NameError")
except ValueError as e:
    print("ValueError")
except Exception as e:
    print("有异常")
finally:
    print("我肯定会被执行的")
代码语言:txt
AI代码解释
复制
I love you
代码语言:txt
AI代码解释
复制
3.1415926
代码语言:txt
AI代码解释
复制
ValueError
代码语言:txt
AI代码解释
复制
我肯定会被执行的
代码语言:txt
AI代码解释
复制
# raise 案例-2
# 自定义异常
# 需要注意:自定义异常必须是系统异常的子类
class DanaValueError(ValueError):
    pass

try:
    print("I love you")
    print(3.1415926)
    # 手动引发一个异常
    # 注意语法:raise ErrorClassName
    raise DanaValueError
    print("还没完呀")
except NameError as e:
    print("NameError")
# except DanaValueError as e:
#    print("DanaError")
except ValueError as e:
    print("ValueError")
except Exception as e:
    print("有异常")
finally:
    print("我肯定会被执行的")
代码语言:txt
AI代码解释
复制
I love you
代码语言:txt
AI代码解释
复制
3.1415926
代码语言:txt
AI代码解释
复制
ValueError
代码语言:txt
AI代码解释
复制
我肯定会被执行的
代码语言:txt
AI代码解释
复制
# else语句案例

try:
    num = int(input("Please input your number:"))
    rst = 100/num
    print("计算结果是:{}".format(rst))
except Exception as e:
    print("Exceptiong")  
    
else:
    print("No Exception")
finally:
    print("反正我会被执行")
代码语言:txt
AI代码解释
复制
Please input your number:0
代码语言:txt
AI代码解释
复制
Exceptiong
代码语言:txt
AI代码解释
复制
反正我会被执行

关于自定义异常

  • 只要是raise异常,则推荐自定义异常
  • 在自定义异常的时候,一般包含以下内容:
    • 自定义发生异常的异常代码
    • 自定义发生异常后的问题提示
    • 自定义发生异常的行数
  • 最终的目的是,一旦发生异常,方便程序员快速定位错误现场

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
“前.NET Core时代”如何实现跨平台代码重用 ——源文件重用
微软在2002年推出了第一个版本的 .NET Framework,这是一个主要面向Windows 桌面(Windows Forms)和服务器(ASP.NET Web Forms)的基础框架。在此之后,PC的霸主地位不断受到其他设备的挑战甚至取代,为此微软根据设备自身的需求对.NET Framework作了相应的简化和改变,不断推出了针对具体设备类型的.NET Framework,主流的包括Windows Phone、Windows Store、Silverlight和Xbox等,它们分别对移动、平板和游戏设
蒋金楠
2018/01/15
8760
“前.NET Core时代”如何实现跨平台代码重用 ——源文件重用
.NET Core与.NET Framework、Mono之间的关系
随着微软的.NET开源的推进,现在在.NET的实现上有了三个.NET Framework,Mono和.NET Core。经常被问起Mono的稳定性怎么样,后续Mono的前景如何,要回答这个问题就需要搞清楚这三个.NET 实现之间的关系和将来如何演进。 到目前为止(2015.2.17),微软在Windows平台上的.NET Framework的实现最为完整,但是.NET Framework和windows操作系统有很深的绑定,难以跨平台。Xamarin主导的Mono项目在.NET 的基础类库实现上有一些不够完
张善友
2018/01/29
1.5K0
.NET Core全面扫盲贴
标签: .NETCore Asp.NETCore 1. 前言 .NET发行至今已经过了十四个年头。随着版本的不断迭代更新,.NET在Windows平台上的表现也是越来越好,可以说Windows平台上所有的应用类型.NET几乎都能完成。 只是成也Windows,败也Windows,这十四年来,除了部分“民间”版本,.NET一直没能在官方支持下摆脱Windows平台的局限,“开源”和“跨平台”这两个词语也是所有.NET开发者心中的痛楚。最终,.NET Core出现了,它让开发者们在官方和社区的支持走出了Wind
潘成涛
2018/01/18
1.8K0
.NET Core全面扫盲贴
【C# Personal Handbook】运行环境
来源 : https://docs.microsoft.com/tr-tr/dotnet/framework/get-started/overview CLR 组件
AI.NET 极客圈
2022/11/11
4580
【C# Personal Handbook】运行环境
.NET Core跨平台的奥秘[中篇]:复用之殇
在《.NET Core跨平台的奥秘[上篇]:历史的枷锁》中我们谈到:由于.NET是建立在CLI这一标准的规范之上,所以它天生就具有了“跨平台”的基因。在微软发布了第一个针对桌面和服务器平台的.NET Framework之后,它开始 “乐此不疲” 地对这个完整版的.NET Framework进行不同范围和层次的 “阉割” ,进而造就了像Windows Phone、Windows Store、Silverlight和.NET Micro Framework的压缩版的.NET Framework。从这个意义上讲,
蒋金楠
2018/01/15
1.3K0
.NET Core跨平台的奥秘[中篇]:复用之殇
.NET Core跨平台的奥秘[下篇]:全新的布局
从本质上讲,按照CLI规范设计的.NET从其出生的那一刻就具有跨平台的基因,这与Java别无二致。由于采用了统一的中间语言,微软只需要针对不同的平台设计不同的虚拟机(运行时)就能弥合不同操作系统与处理器架构之间的差异,但是“理想很丰满,现实很骨感”。在过去十多年中,微软将.NET引入到了各个不同的应用领域,表面上看起来似乎欣欣向荣,但是由于采用完全独立的多目标框架的设计思路,导致针对多目标框架的代码平台只能通过PCL(参考《.NET Core跨平台的奥秘[中篇]:复用之殇》)这种“妥协”的方式来解决。如果依
蒋金楠
2018/02/08
1.1K0
.NET Core跨平台的奥秘[下篇]:全新的布局
使用MonoDevelop开发跨平台的应用程序
Mono®项目在3月31日发布了Mono2.4和MonoDevelop 2.0版本,2009年6月3日Lluis 在博客上宣布了MonoDevelop是一个完全跨平台的IDE。Mono计划的主管Miguel de Icaza也在博客上介绍了MonoDevelop 2.2版本。 在 2003 年后期,部分Mono社区的开发者开始移植SharpDevelop到 Linux 上(SharpDevelop是个成功的 .NET 开发源代码的集成开发环境),将原本以 System.Windows.Forms 为基础的代
张善友
2018/01/22
1.6K0
使用MonoDevelop开发跨平台的应用程序
Novell 发布Mono 1.2 推动.NET跨平台
      微软开发框架的开源版本现在能够在更多现有.NET应用程序上运行。Mono项目宣布发布Mono 1.2版——微软.NET框架的开源版本。该项目由Novell支持,允许为Windows框架编写的应用程序在Linux和其它非微软平台上运行。最新版本全面支持.NET 1.1,并部分与.NET 2.0兼容,包括支持Windows Forms。       Mono按ECMA标准ECMA-335定义的标准执行.NET,ECMA-335指定通用语言基础构架(Common Language Infrastru
张善友
2018/01/30
1K0
Mono 和 .NET Core比翼双飞
大家好,今天给大家分享.NET 蓝图之下的Mono和.NET Core 话题,微软在Build 2019 大会上给.NET 做了一个五年规划,所以分享的主题就是《Mono和.NET Core 比翼双飞》,将在完成这个五年规划的时候合体。
张善友
2019/07/02
1.1K0
.NET Framework 框架的一些简单介绍
1)OMC(对象组件模型)的CORBA 2)Microsoft的COM/DCOM 3)Sun公司的JavaBeans
庞小明
2019/07/02
1.3K0
.NET平台系列7 .NET Core 体系结构详解
  .NET Core 是基于.NET Framework 为基础,借鉴了其优秀的思想与强大的功能,经过重新设计与构建,实现了.NET Framework 中的部分功能(不包含Windows UI部分),比如JIT、垃圾收集器(GC)、CLR、BCL等。
张传宁IT讲堂
2021/05/20
1.1K0
.NET面试题系列[1] - .NET框架基础知识(1)
面试出现频率:从来没人问过。事实上我都不知道怎么问,考背书吗?倒是可以问问知不知道现在.NET最新版本是什么,考察面试者是否对新技术足够敏感。
s055523
2018/09/14
1.7K0
.NET面试题系列[1] - .NET框架基础知识(1)
通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?
什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐渐引入一系列.NET的相关概念,这主要包
小曾看世界
2018/08/03
4.7K0
通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?
.NET 基金会项目介绍-Mono
Mono .Net Framework 的跨平台开源实现,项目源起于 2001 年。该项目技术最早由 Ximian 进行开发,后经手了 Novell 和 Xamarin , 目前由 Microsoft 主持。
newbe36524
2020/03/16
1.2K0
.NET平台系列12 .NET未来之开源.NET Core
  微软于2014年11月推出了.NET Core 1.0。.NET Core的目标是从我们在过去12年中对.NET Framework的构建、交付和服务的经验中吸取教训,并开发出的更好的产品。这些改进的一些例子包括并行安装(可以安装新版本,而不必担心破坏现有应用程序)、自包含应用程序(应用程序可以嵌入.NET,因此.NET不需要在计算机上安装),而不是Windows操作系统的一个组件(.NET发布独立于操作系统时间表的新版本)等等。在此基础上,我们使.NET Core开源和跨平台。
张传宁IT讲堂
2021/06/09
1.4K0
.NET平台系列12 .NET未来之开源.NET Core
基于Kubernetes 构建.NET Core技术中台
今天下午在腾讯云+社区社区分享了《基于Kubernetes 构建.NET Core技术中台》,下面是演讲内容的文字实录。
张善友
2019/07/02
1K0
开源Mono框架将C#编程带到iPhone、Android和Wii
Mono,作为.NET运行库的开源实现,正在将微软的技术带到未曾预料到的地方,包括iPhone,Android和Wii。 根据Novell公司的首席Mono开发者Miguel de Icaza称,Apple的App Store中有多个应用程序是基于Mono。 这可能会让那些熟悉苹果应用程序限制政策的人感到意外,因为苹果公司严格禁止开发者使用解释语言和第三方运行环境——在很大程度上就将.NET和Java之类技术排除在外。 静态编译(Static compilation)是一道特别的沙司,正是它使
张善友
2018/01/30
2K0
.NET平台系列19 新世界中的.NET大统一平台架构解析
  微软在.NET跨平台之路上付出了巨大的艰辛,同时做了海量的工作。首先推出了统一的API标准规范库 .NET Standard,并不断补充完善标准库,截止目前(2021-5-26)最新版本为 .NET Standard 2.1。之后发布了跨平台解决方案 .NET Core,同时建立.NET基金会,并大力发展生态建设,世界知名IT公司纷纷加入并贡献,社区发展异常活跃。收购Xamarin公司后,Mono也正是加入微软大家庭,填补了微软技术栈在移动APP开发领域的技术空白。
张传宁IT讲堂
2021/06/10
1.9K0
.NET平台系列19 新世界中的.NET大统一平台架构解析
Mono 2.0正式发布了
Mono官网:http://mono-project.com/ 2.0 Release Notes: http://www.mono-project.com/Release_Notes_Mono_2.0 Mono Project Announces Mono 2.0 for Cross-Platform Microsoft .NET Development: http://www.novell.com/news/press/mono-project-announces-mono-2-0-for-cros
张善友
2018/01/31
1.3K0
Mono 2.0正式发布了
.NET程序员应该关注开源社区
如果你是一位net开发人员,请关心一下开源社区吧!俺也是net程序员,我也深深的了解net程序员的优缺点。请你们不要排斥开源,也不要一味的使用MS的产品。有的时候开源的东东能给你另外的一种解决方案,能让你看到另外的一片天地。你也不要觉得开源非常的高深,如果有机会,你也尽可能的加入其中。.NET开源的重量级参与者就是Mono,他让你轻松的将.NET应用运行到Linux上。 微软让mono发展得更好 作为CLR和C#以及.net Framework的另一个实现,mono主要还是用于非Windows平台,mono
张善友
2018/01/30
8590
推荐阅读
相关推荐
“前.NET Core时代”如何实现跨平台代码重用 ——源文件重用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文