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. Redis笔记 -- 在 Centos7.4单机中部署Redis集群(二)

    0x00--背景和目的 在单台PC服务器上部署Redis集群,通过不同的TCP端口启动多实例,模拟多台独立PC组成集群. 0x01--环境描述: Centos版本:CentOS Linux relea ...

  2. Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.

    刚刚在一台Linux服务器上安装了jdk和Tomcat,然后部署了一个web项目,在项目中有个添加图片的功能,保存图片时报错 org.springframework.web.util.NestedSe ...

  3. 5 替换空格 JavaScript

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy.   原来一个空格字符,替换之后 ...

  4. JS DOM 1

    接触JS也有快一个月了,现在来总结一下看过的书,一本本总结,之后再融会贯通,也许更有助于学习.废话不多说,现在看的是<JavaScript DOM编程艺术>,该书挺薄的,不太会望而生畏,( ...

  5. Spring security学习笔记(二)

    对比两种承载认证信息的方式: session vs token token验证方案: session验证方案: session即会话是将用户信息保存在服务端,根据请求携带的session_id,从服务 ...

  6. win10 下安装 MongoDB 数据库支持模块(python)

    C:\>pythonPython 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] o ...

  7. centos7下使用n grok编译服务端和客户端穿透内网

    (发现博客园会屏蔽一些标题中的关键词,比如ngrok.内网穿透,原因不知,所以改了标题才能正常访问,) 有时候想在自己电脑.路由器或者树莓派上搭建一些web.vpn等服务让自己用,但是自己的电脑一般没 ...

  8. QOS-配置拥塞避免机制

    QOS-配置拥塞避免机制 2018年7月7日 20:29 尾丢弃及其导致的问题: 队列满时路由器进行尾丢弃,即新到的所有数据包都全部丢弃 丢弃的结果造成高延迟.高抖动.丧失服务保证.TCP全局同步.T ...

  9. %.*lf控制输出长度

    #include<stdio.h> int main(){    int a,b,c;    while(scanf("%d%d%d",&a,&b,&a ...

  10. linux 通过 openconnect 来连接学校内网

    参考 http://xingda1989.iteye.com/blog/1969908 https://blog.csdn.net/edin_blackpoint/article/details/70 ...