1.异常

当出现错误时,程序就会发生异常

num1=input('Please input a num1: ')
num2=input('Please input a num2: ')

print(float(num1)/float(num2))

输入num1=3,num2=0,程序产生异常

除了除零异常,还有许多种异常:

ImportError:无法引入包或模块
IndexError:下标索引超界
NameError:使用还未赋值的变量
SyntaxError:代码逻辑出错,不能执行
TypeError:传入的对象类型与要求不符
ValueError:传入一个不被期望的值,即使类型正确
KeyError:试图访问字典里不存在的键
IOError:输入输出异常
ZeroDivisionError:除零
AttributeError:尝试访问未知的对象属性

(1)异常捕获

使用try…except…语句来捕获异常

num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
try:
	print(float(num1)/float(num2))
except:
	print('Error!')

输出结果:

也可以在except后面加上具体的异常

num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
try:
	print(float(num1)/float(num2))
except ZeroDivisionError:
	print('Error!')

(2)处理多个异常

上面的例子不止会出现除零异常,如果我输入的不是数字而是字母,也会产生异常

num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
try:
	print(float(num1)/float(num2))
except ZeroDivisionError:
	print('Error!')
except ValueError:
	print('Input a num!')

输出结果:

也可以只写一个except语句

num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
try:
	print(float(num1)/float(num2))
except (ZeroDivisionError,ValueError):    #一定要用()包起来
	print('Error!')

(3)else语句

num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
try:
	print(float(num1)/float(num2))
except (ZeroDivisionError,ValueError):
	print('Error!')
else:
	print('Input right!')

如果产生异常就不会执行else语句

(4)finally语句

num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
try:
	print(float(num1)/float(num2))
except (ZeroDivisionError,ValueError):
	print('Error!')
else:
	print('Input right!')
finally:
	print('Over!')

不管会不会产生异常,都会执行finally语句.所以finally语句多用来收尾.

(5)输出异常信息

如果想要输出异常信息,并且使用默认的异常提示

num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
try:
	print(float(num1)/float(num2))
except Exception as e:
	print(e)
	print('Error!')
else:
	print('Input right!')
finally:
	print('Over!')

输出结果:

(6)抛出异常

raise需要指定一个参数,必须是一个异常的实例或者是异常的类

a=1
raise ValueError('Error!')

输出结果:

在except里面,raise可以不用传入参数,这样会将异常再次抛出

num1=input('Please input a num1: ')
num2=input('Please input a num2: ')
try:
	print(float(num1)/float(num2))
except Exception as e:
	print(e)
	raise

输出结果:

2.断言

assert后面接的第一个参数应该是一个布尔表达式,如果表达式的值为True,不会中断程序,如果表达式的值为False,就会中断程序

assert后面接的第二个参数是产生中断之后要输出的内容

num1=input('Please input a num1: ')
num2=input('Please input a num2: ')

assert (float(num2)!=0),'Error!'
print(float(num1)/float(num2))

输出结果:

Python3 异常与断言的更多相关文章

  1. 两张图解读Java异常与断言

    两张图解读Java异常与断言                                 --转载请注明出处:coder-pig 本节引言: 前天公布的"七张图解析Java多线程&quo ...

  2. Java核心技术卷一基础知识-第11章-异常、断言、日志和调试-读书笔记

    第11章 异常.断言.日志和调试 本章内容: * 处理错误 * 捕获异常 * 使用异常机制的技巧 * 使用断言 * 日志 * 调试技巧 * GUI程序排错技巧 * 使用调试器 11.1 处理错误 如果 ...

  3. Python3 异常: name 'basestring' is not defined

    Python3 异常: name 'basestring' is not defined 问题分析: python3 里已经没有basestring 类型,用str代替了basestring : 解决 ...

  4. Java基础-异常、断言

    处理错误 如果Java程序运行期间出现了错误,并且由于出现错误导致某些操作没有完成,程序应该能够返回到一种安全状态,并能够让用户执行一些其他的命令:或者允许用户保存所有操作结果,并以妥善的方式终止程序 ...

  5. Java核心技术-异常、断言和日志

    程序发生错误时至少做到以下几点: *向用户通告错误 *保存所有的工作结果 *允许用户以妥善的形式退出程序 Java使用一种称为异常处理的错误捕获机制处理异常. 本章第一部分介绍Java的异常,第二部分 ...

  6. webdriver高级应用- 测试过程中发生异常或断言失败时进行屏幕截图

    封装了三个类来实现这个功能: 1.DataUtil.py 用于获取当前的日期以及时间,用于生成保存截图文件的目录名,代码如下: #encoding=utf-8 import time from dat ...

  7. .Java中的异常、断言、日志【草稿下,Log4j专题】

    (本章主要讲解Java里面比较核心的一块内容--异常处理,Java异常处理机制,一致都是比较复杂的一块,而很多时候如果写程序的时候能够适当地注意对应的一些异常处理情况,那么就会在开发过程节省一大部分时 ...

  8. 《Java核心技术》笔记:第7章 异常、断言和日志

    1. 异常 (P 280)异常处理需要考虑的问题: 用户输入错误 设备错误 物理限制 代码错误 (P 280)传统的处理错误的方法是:返回一个特殊的错误码,常见的是返回-1或者null引用 (P 28 ...

  9. C语言异常与断言接口与实现

    程序中通常会出现三种错误:用户错误.运行期错误以及异常 欢迎关注我的个人博客:www.wuyudong.com, 更多精彩文章与您分享 标准库函数setjmp和longjmp 在C语言中,标准库函数s ...

随机推荐

  1. Struts2-01

    一.Struts2的介绍 讲Struts2框架之前,我们需要知道框架是什么呢?估计大多数初学者都只知道其名却不知其意,框架就是一个半成品,别人将一些功能已经写好了,我们只需要拿来用即可,像我们之前使用 ...

  2. python环境Anaconda的安装

    本人最开始的的环境为:win10 + 32位的python 最近想学习一下爬虫,听说某些库需要64的python才能实现(本人也是小白,只是平时喜欢折腾,这里是听说,暂时没有能力解释),无奈之下只好卸 ...

  3. jQuery UI.Layout 参数

    applyDefaultStyles: true,//应用默认样式 scrollToBookmarkOnLoad:false,//页加载时滚动到标签 showOverflowOnHover:false ...

  4. 如何给ioloop.run_sync()中调用的函数传入参数

    问题 如何给tornado.ioloop.IOLoop中的run_sync方法中调用的函数添加参数 解决方案 使用functools.partial 解决示例 from tornado import ...

  5. Redis Cluster Notes

    Redis Cluster Goal:     1. 最大支持1000个节点的高性能.可线性扩展集群:集群架构中无Proxy层,主从间采用异步同步机制(replication),无merge层(不支持 ...

  6. java集合基础篇 简单总结

    昨天晚上看了编程思想4的持有对象,所以把学到看到的一些记记背背的方面给总结一下. java的容器主要分为两类,一个是实现了接口Collection的一类,还有一个是实现了Map接口的一类. 继承Col ...

  7. s3c2440系统时钟详解

    一.S3C2440系统时钟体系 S3C2440的时钟控制逻辑可以外接晶振,然后通过内部电路产生时钟源:也可以直接使用内部提供的时钟源,他们通过引脚的设置来选择.时钟逻辑给整个芯片提供了3中时钟:FCL ...

  8. django路由基本使用-6

    路由定义位置 django的路由是定义在 urls.py 文件下的 urlpatterns 列表中的. urls.py 文件是路由解析的入口. from django.conf.urls import ...

  9. python之内存与编码的那点事

    一.初始编码 ASCII 码不支持中文 是py2版本中的默认编码 ​Unicode 万国码, 英文使用16位(即两个字节​),中文使用32位(四个字节) ​utf-8 美国最少使用八位(1字节), 欧 ...

  10. Java学习笔记十六:Java中的构造方法

    Java中的构造方法 1.使用new+构造方法 创建一个新的对象: 2.构造方法是定义在Java类中的一个用来初始化对象的方法: 3.构造方法与类同名且没有返回值: 4.语法格式: public 构造 ...