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 ...
随机推荐
- Oracle 体系结构二 内存结构
Oracle实例由共享内存块(SGA)以及大量的后台进程构成. SGA必须包含的数据结构: 数据库缓冲区缓存 日志缓冲区 共享池 可选的数据结构: 大池 JAVA池 流池 其他缓冲区缓存池 用户会话还 ...
- Oracle数据库新装之后出现的监听程序无法正常启动和运行(Oracle-12514)
修改安装目录下的配置文件 比如:F:\app\admin-PC\product\11.2.0\dbhome_1\network\admin\ 修改这个目录下的listener.ora和tns ...
- MyBatis-Plus工具快速入门使用
MyBatis-plus有什么特色 1.代码生成 2.条件构造器 对我而言,主要的目的是使用它强大的条件构建器. 快速使用步骤: 1.添加pom文件依赖 <dependency> < ...
- html中的定位
html中的定位体系 一. 分类 1.常规流static 2.浮动float 3.相对定位relative 4.绝对定位absolute 5.固定定位fixed 二.使用时的区分 在网页布局中,常常都 ...
- Java核心技术36讲----------谈谈final、finally、finalize有什么不同
一.final 1.final修饰方法时,需要注意的点: #final修饰方法时,之前的第二个原因是效率.但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升.在最近的Java版本中,不需要使用 ...
- 学习/linux/list.h_双链表实现
linux-3.5/include/linux/list.h 使用只含指针域的双向循环链表进行链表的操作. 下面是我选取部分list.h中代码: #ifndef _LINUX_LIST_H #defi ...
- SRM32(8)——ADC和DAC
1.ADC简介 STM32 拥有 1~3 个 ADC(STM32F101/102 系列只有 1 个 ADC)STM32F103至少拥有2个ADC,STM32F103ZE包含3个ADC,这些 ADC 可 ...
- 带提示范围的猜数小游戏--python
import random random_number = random.randint(1, 99) print(random_number) start_data = 1 end_data = 9 ...
- 从python2.x到python3.x进阶突破
1.p2是重复代码,语言不同,不支持中文;p3则相反,其中代码不重复,语言用的相同的,并且是支持中文的. 2.p2中input中输入数字输出数字,输入字符串必须自己手动加引号才行;p3中input输出 ...
- notpad++ 搭配 gcc
notpad++ 搭配 gcc GCC 是 GNU 编译器套装的简称(GNU Compiler Collection),一套编程语言编译器,以 GPL 及 LGPL 许可证所发行的自由软件,也是 GN ...