在写python程序时, 不要害怕报错, 也不要怕自己的英语不够好, 不要看到一有红色的字就心里发怂. 其实报的错也是有套路可寻滴~识别了异常的种类, 才能对症下药.

常见异常:

Exception                        所有异常的基类

AttributeError                 特性应用或赋值失败时引发

IOError                             试图打开不存在的文件时引发

IndexError                       在使用序列中不存在的索引时引发

KeyError                          在使用映射不存在的键时引发

NameError                       在找不到名字(变量)时引发

SyntaxError                     在代码为错误形式时引发

TypeError                         在内建操作或者函数应用于错误类型的对象是引发

ValueError                       在内建操作或者函数应用于正确类型的对象,但是该对象使用不合适的值时引发

ZeroDivisionError          在除法或者摸除操作的第二个参数为0时引发

1. 抛出异常

def div(x,y):
if y == 0:
raise ZeroDivisionError('Zero is not allowed.')
return x/y try:
div(4,0)
except Exception as e:
print(e)
Zero is not allowed.

Process finished with exit code 0

2. 捕捉异常:
可同时捕捉多个异常,可捕捉异常对象,可忽略异常类型以捕捉所有异常

try:
x = int(input('input x:'))
y = int(input('input y:'))
print('x/y = ',x/y)
except ZeroDivisionError: #捕捉除0异常
print("ZeroDivision")
except (TypeError,ValueError) as e: #捕捉多个异常,并将异常对象输出
print(e)
except: #捕捉其余类型异常
print("it's still wrong")
input x:3
input y:0
ZeroDivision Process finished with exit code 0
input x:5
input y:a
invalid literal for int() with base 10: 'a' Process finished with exit code 0

try/except 可以加上 else 语句,实现在没有异常时执行什么

try:
x = int(input('input x:'))
y = int(input('input y:'))
print('x/y = ',x/y)
except ZeroDivisionError: #捕捉除0异常
print("ZeroDivision")
except (TypeError,ValueError) as e: #捕捉多个异常,并将异常对象输出
print(e)
except: #捕捉其余类型异常
print("it's still wrong")
else: #没有异常时执行
print('it works well')
input x:4
input y:2
x/y = 2.0
it works well Process finished with exit code 0

3. finally 语句
不管是否出现异常,最后都会执行finally的语句块内容,用于清理工作
所以,你可以在 finally 语句中关闭文件,这样就确保了文件能正常关闭

try:
x = int(input('input x:'))
y = int(input('input y:'))
print('x/y = ',x/y)
except ZeroDivisionError: #捕捉除0异常
print("ZeroDivision")
except (TypeError,ValueError) as e: #捕捉多个异常,并将异常对象输出
print(e)
except: #捕捉其余类型异常
print("it's still wrong")
else: #没有异常时执行
print('it works well')
finally: #不管是否有异常都会执行
print("Cleaning up")
input x:4
input y:a
invalid literal for int() with base 10: 'a'
Cleaning up Process finished with exit code 0

异常抛出之后,如果没有被接收,那么程序会抛给它的上一层,比如函数调用的地方,要是还是没有接收,那继续抛出,如果程序最后都没有处理这个异常,那它就丢给操作系统了 -- 你的程序崩溃了

Python之异常处理-Exception的更多相关文章

  1. python的异常处理及异常类定义

    python的异常处理语法和大多数语言相似: try: try块的语句... except exceptiontype1 as var:#使用as语句获得本次捕获到的异常的实例var except块语 ...

  2. Python进阶----异常处理

    Python进阶----异常处理 一丶错误和异常   错误:       语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 ...

  3. Python 多进程异常处理

    前言 最近项目用到了Python作为网站的前端,使用的框架是基于线程池的Cherrypy,但是前端依然有一些比较‘重’的模块.由于python的多线程无法很好的利用多核的性质,所以觉得把这些比较‘重’ ...

  4. 异常处理—Exception(三)

    最近有点事,把这个系列给落下了,给大家道个歉,这里还要感谢我的老婆,谢谢她一直对我的支持:) 系列回顾: 1.异常处理--Exception(一) 2.异常处理—Exception(二) 上一篇中主要 ...

  5. 异常处理—Exception(二)

    在上一篇中"异常处理--Exception(一)"中,跟大家简单介绍了一下Exception,也使大家充分的了解了Exception管理在一个项目中的重要性,那如何在我们的项目中处 ...

  6. python的异常处理机制

    异常机制己经成为衡量一门编程语言是否成熟的标准之一,使用异常处理机制的 Python 程序有更好的容错性,更加健壮. 对于计算机程序而言,情况就更复杂了一一没有人能保证自己写的程序永远不会出辛苦!就算 ...

  7. python的异常处理try/except 万能处理exception

    1.try方式 try: age=int(input(">>>")) int(age)#主逻辑 num=input(">>>>& ...

  8. python基础-异常处理

    一.错误和异常 程序中难免出现错误,而错误分成两种 1.1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def te ...

  9. python的异常处理

    在所有的程序中,都会遇到异常,有些异常是代码编写的时候产生的,在前期过程中可能会直接导致程序无法运行.这一类的异常,在编写代码的时候,程序可以直接排查修改.但有些异常,是在程序运行过程中产生的,可能是 ...

随机推荐

  1. time:时间就是生命

    golang中的time包是用来处理时间的. 1.时间的基本属性 package main import ( "fmt" "strings" "tim ...

  2. Liunx 用户权限之目录

    总结一下: 今天又对liunx权限的认知多了一点,就是关于目录的权限的作用 可以打个比方来形容就是:相当于一个大门 只有目录权限都有的情况下,才能够对目录中的文件进行目录权限操作 例如:drwxrwx ...

  3. 解决找不到roslyn\csc.exe文件问题

    csc.exe代表C# 编译器,所以在需要项目nuget包引用”Microsoft.CodeDom.Providers.DotNetCompilerPlatform“以及”Microsoft.Net. ...

  4. Apk反编译那些事

    参考博客: https://blog.csdn.net/cbd_2012/article/details/91410119 https://mp.weixin.qq.com/s?__biz=MzI0N ...

  5. 〇二——body内标签之交互输入标签二

    我们在上一章讲了一些要通过后台程序实现交互的标签,下面我们看一看一些不通过后台实现交互的标签. 一.a标签 a标签主要实现超链接的功能 1.跳转效果 这个效果比较简单,直接在属性里添加一个网址,然后可 ...

  6. Java中如何判断两个对象是否相等(Java equals and ==)

    原文https://www.dutycode.com/post-140.html 如何判断两个对象相等,这个问题实际上可以看做是如何对equals方法和hashcode方法的理解. 从以下几个点来理解 ...

  7. C++ 编码导致编译错误

    记录一个问题 平时经常用Notepad++写C++,然后g++编译 最近出现一个莫名其妙的问题 原来是编译时遇到了非法字符 用Notepad++一看,原来文件的编码出现的变化 不是UTF-8或者其他对 ...

  8. OpenCV笔记(4)(直方图、傅里叶变换、高低通滤波)

    一.直方图 用于统计图片中各像素值: # 画一个图像各通道的直方图 def draw_hist(img): color = ('b', 'g', 'r') for i, col in enumerat ...

  9. QT:QSS字体设置

    css,qss font-family常用的黑体宋体等字体中英文对照 当qss使用中文设置字体时,无法生效.因为qss不支持中文设置字体,所以下面给出一些常用的黑体宋体字体中英文对照. 微软雅黑: M ...

  10. Java多线程和并发(八),synchronized底层原理

    目录 1.对象头(Mark Word) 2.对象自带的锁(Monitor) 3.自旋锁和自适应自旋锁 4.偏向锁 5.轻量级锁 6.偏向锁,轻量级锁,重量级锁联系 八.synchronized底层原理 ...