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. Oracle中插入千万条测试数据

    测试需求,id.姓名.邮箱.手机号不可重复 1.创建序列 create sequence id_sequence; //创建序列id_sequence 2.创建表 create table USERI ...

  2. oracle整理

    1.安装oracle数据库2.创建数据库实例(可选)3.创建用户.角色.授权(可选) 查询数据库名:select name,dbid from v$database;查询实例名 :select ins ...

  3. 技巧:Vimdiff 使用(改)

    技巧:Vimdiff 使用(改) 各种 IDE 大行其道的同时,传统的命令行工具以其短小精悍,随手可得的特点仍有很大的生存空间,这篇短文介绍了一个文本比较和合并的小工具:vimdiff.希望能对在 U ...

  4. TCP/IP初识(一)

    TCP/IP学习记录,如有错误请指正,谢谢!!! 什么是TCP/IP协议? TCP/IP协议族分为四层(另一个名字是Internet协议族(Internet Protocol Suite)):链路层. ...

  5. chromium之message_pump_default

    看看头文件,默认的消息泵,该类实现了MessagePump的四个接口 class MessagePumpDefault : public MessagePump { public: MessagePu ...

  6. 在SQL Server中批量修改有规律列的定义

    )=N'要修改的表名'; --修改所有以sl结尾的列名的小数位数为4位 select syscolumns.name into #t1 from syscolumns,systypes where s ...

  7. 谈个人对avascript面向对象的理解

    javascript,不但是javascript或者是别的语音,大多数都有一句经典的话:一切皆对象. 下面谈谈我个人对面向对象的理解,为什么要用面向对象来写js,这话我思考了很久,最后得出的结论就是: ...

  8. javascript实现复选框单选多选!

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. ASP.NET Core获取微信订单数据

    前几天对接了一波微信的订单,分享出来 1.生成签名 根据微信要求把appid.商户号.随机数.和订单号还有商户平台的密钥拼接成一个字符串然后进行MD5加密 2.拼接请求XML 然后用拼接好的XML向微 ...

  10. Java : java基础(6) 反射与枚举

    类需要经过 加载, 连接, 初始化三个步骤来进行初始化. 加载是把class文件读入内存创建一个class对象, 连接分为三步,第一步是验证是否是正确的结构, 第二步是准备, 为类的静态成员分配内存, ...