Python3 异常与断言
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 异常与断言的更多相关文章
- 两张图解读Java异常与断言
两张图解读Java异常与断言 --转载请注明出处:coder-pig 本节引言: 前天公布的"七张图解析Java多线程&quo ...
- Java核心技术卷一基础知识-第11章-异常、断言、日志和调试-读书笔记
第11章 异常.断言.日志和调试 本章内容: * 处理错误 * 捕获异常 * 使用异常机制的技巧 * 使用断言 * 日志 * 调试技巧 * GUI程序排错技巧 * 使用调试器 11.1 处理错误 如果 ...
- Python3 异常: name 'basestring' is not defined
Python3 异常: name 'basestring' is not defined 问题分析: python3 里已经没有basestring 类型,用str代替了basestring : 解决 ...
- Java基础-异常、断言
处理错误 如果Java程序运行期间出现了错误,并且由于出现错误导致某些操作没有完成,程序应该能够返回到一种安全状态,并能够让用户执行一些其他的命令:或者允许用户保存所有操作结果,并以妥善的方式终止程序 ...
- Java核心技术-异常、断言和日志
程序发生错误时至少做到以下几点: *向用户通告错误 *保存所有的工作结果 *允许用户以妥善的形式退出程序 Java使用一种称为异常处理的错误捕获机制处理异常. 本章第一部分介绍Java的异常,第二部分 ...
- webdriver高级应用- 测试过程中发生异常或断言失败时进行屏幕截图
封装了三个类来实现这个功能: 1.DataUtil.py 用于获取当前的日期以及时间,用于生成保存截图文件的目录名,代码如下: #encoding=utf-8 import time from dat ...
- .Java中的异常、断言、日志【草稿下,Log4j专题】
(本章主要讲解Java里面比较核心的一块内容--异常处理,Java异常处理机制,一致都是比较复杂的一块,而很多时候如果写程序的时候能够适当地注意对应的一些异常处理情况,那么就会在开发过程节省一大部分时 ...
- 《Java核心技术》笔记:第7章 异常、断言和日志
1. 异常 (P 280)异常处理需要考虑的问题: 用户输入错误 设备错误 物理限制 代码错误 (P 280)传统的处理错误的方法是:返回一个特殊的错误码,常见的是返回-1或者null引用 (P 28 ...
- C语言异常与断言接口与实现
程序中通常会出现三种错误:用户错误.运行期错误以及异常 欢迎关注我的个人博客:www.wuyudong.com, 更多精彩文章与您分享 标准库函数setjmp和longjmp 在C语言中,标准库函数s ...
随机推荐
- Flask—09-项目部署(01)
项目部署 WEB工作原理 客户端(chrom) <=> WEB服务器(nginx) <=> WSGI(uWSGI) <=> Python(Flask) <=& ...
- 360极速浏览器用ie8模式打开网页(360浏览器同理)
在访问年代久远的的网页时经常会遇到兼容性的问题,用360浏览器(或360极速浏览器)中通过设置可解决. 在360极速浏览器中分别依次选择:选项->高级设置->内核模式->内核切换设置 ...
- 编译问题: "ld: duplicate symbol _OBJC_METACLASS_$_XXX..."
在新的SDK环境中调试百度地图的应用程序时,app总是意外退出,找了半天发现错误的原因是unrecognized selector xx的错误,另外还有报了一个Unknown class XXX in ...
- 浅谈async函数await用法
今天状态不太好,睡久了懵一天. 以前只是了解过async函数,并还没有很熟练的运用过,所以先开个坑吧,以后再结合实际来更新下,可能说的有些问题希望大家指出. async和await相信大家应该不陌生, ...
- 针对jquery的ajax中的参数理解
1. url 发送请求的地址.为空表示当前页. $.ajax({ type: "post", data: studentInfo, contentType: "appli ...
- jquery 去除空格
/** * 是否去除所有空格 * @param str * @param is_global 如果为g或者G去除所有的 * @returns */ function Trim(str,is_globa ...
- C# Server.MapPath的使用方法
(1)WebForm中: HttpContext.Current.Server.MapPath("~/Files/car/"); (2)Mvc中: Server.MapPath() ...
- Vue性能优化之组件按需加载(以及一些常见的性能优化方法)
关于Vue中的按需加载我就简单介绍一下:大概就是我们所有的东西都会在app.js里面,但是我们并不需要把所有的组件都一次性加载进来,我们可以在需要它的时候再将它加载进来,话不多说,开车! 1.webp ...
- Css Sprite(雪碧图、精灵图)<图像拼合技术>
一.精灵图使用场景: 二.Css Sprite(优点) 减少图片的字节. 减少网页的http请求,从而大大的提高页面的性能. 解决了网页设计师在图片命名上的困扰,只需对一张集合的图片上命名就可以了,不 ...
- HTML 5 audio标签
audio标签的介绍 定义: <audio> 标签定义声音,比如音乐或其他音频流. <audio></audio>是HTML5中的新标签 能够在浏览器中播放音频, ...