Python全栈工程师(异常(基础))
Python人工智能从入门到精通
补充:包的相对导入 只对后两种导入方式有用 前两次改进的学生管理系统在20课中 已补充
异常(基础)except:
什么是错误:
是指由于逻辑或语法等导程序无法正常执行的问题
什么是异常:
是程序出错的标识符的一种状态
当异常发时 程序不会再向下执行,而转去调用此函数的地方
待处理此错误并恢复为正常状态
异常的作用:
用作信号, 通知上层调用者有错误产生需要处理
try 语句:
两种语法:
ry-except语句(接受异常通知)
try-finally语句
try-except 语法 :
try:
可能触发异常的语句
except 错误类型1[as 变量1]:
异常处理语句2
except 错误类型2[as 变量2]:
异常处理语句2
except (错误类型3, 错误类型4,...)[as 变量3]:
异常处理语句3
......
except:
异常处理语句(其他)(匹配所有类型错误)
else:
未发生异常语句(可以没有此语句 没有发成异常时调用)
finlly:
最终语句
作用:
尝试捕获异常, 将程序由异常状态转为正常状态并正常执行
说明:
1. as 子句是用于绑定错误对象的变量,可以省略
2. except 子句可以有一个或多个,但至少要有一个
3. else 子句最多只能有一个,也可以省略不写
4. finally 子句最多只能有一个,也可以省略不写
5. else 子句将在try没有出现异常时执行
6. finally子句的语句在任何情况下都会被执行
示例:
# 此示例示意用try-except 语句捕获异常并做出相应的处理 def div_apple(n):print("%d个苹果您想分给几个人?" % n)s = input("请输入人数: ")cnt = int(s) # <- 此处可能触发ValueError类型错误result = n / cnt # <- 此处可能触发ZeroDivisitionError错误print("每个人分了%d个苹果" % result)try:print("开始分苹果")div_apple(10) # 可能触发异常的调用print("结束分苹果") except ValueError:print("发生成值错误,已处理并转为正常状态!") except ZeroDivisionError:print("发生了被零除的错误,程序已转为正常状态")print("程序正常执行并完全任务,退出程序")
try-finally语法:
try:
可能触发异常的语句
finally:
最终语句
说明:
1.finally子句不可以省略
2.一定不存在except子句
作用:
通常try-finally语句来做触发异常时必须要处理的事情
无论异常是否发生, finally子句一定会被执行
注意:
try-finally 语句不会改变程序的(正常/异常)状态
示例:
# 以下以 煎蛋为例示意 try-finally语句的用法 # 必须要做的事情是,关闭天燃气def fry_egg():print("打开天燃气点燃...")try:count = int(input("请输入鸡蛋个数: "))print("完成煎鸡蛋,共煎了%d个鸡蛋" % count)finally:print("关闭天燃气")fry_egg()
raise 语句:(发起异常通知)
作用:
触发一个错误, 让程序进入异常状态
语法:
raise 异常类型
或
raise 异常对
实例:
def make_exception():print("函数开始")# 发出一个ValueError类型的错误通知给调用者# raise ValueErrorerr = ValueError("这是自定义的错误数据")raise err # 用 err触发一个异常通知print("函数结束")try:make_exception()print("make_exception调用结束!") except ValueError as e:print("接收到ValueError类型的异常通知")print("错误对象是:", e)
assert 断言语句:
语法:
assert 真值表达式, 错误数据(通常是字符串)
作用:
当真值表达式为False时, 用错误数据创建一个AssertionError
类型的错误, 并进入异常状态
等同于:
if 真值表达式 == false
raise AssertrtionError(错误数据)
实例:
def get_score():s = int(input("请输入学生成绩: "))assert 0 <= s <= 100, '成绩超出范围'# if not (0 <= s <= 100):# raise AssertionError('成绩超出范围')return stry:score = get_score() except AssertionError as err:print("错误数据是:", err)print('获取成绩失败')score = 0print("学生的成绩为:", score)
小结:
异常处理语句(4条):
try-except 语句:
用于接受异常通知, 捕获异常
try-finally 语句:
执行必须执行的语句
raise 语句:
发送异常通知, 并进入异常状态
assert 语句:
根据条件选着性的发送 AssertionError类型的异常通知
为什么要处理异常机制:
在程序调用层数比较深的时候, 向主调用函数传递错误信息 需要层层return返回
比较麻烦, 用异常处理机制可以较简单的传递错误信息
Python全部的错误类型
错误类型 | 说明 |
---|---|
以下内容必讲 | |
ZeroDivisionError | 除(或取模)零 (所有数据类型) |
ValueError | 传入无效的参数 |
AssertionError | 断言语句失败 |
StopIteration | 迭代器没有更多的值 |
IndexError | 序列中没有此索引(index) |
IndentationError | 缩进错误 |
OSError | 输入/输出操作失败 |
ImportError | 导入模块/对象失败 |
NameError | 未声明/初始化对象 (没有属性) |
AttributeError | 对象没有这个属性 |
GeneratorExit | 生成器(generator)发生异常来通知退出 |
TypeError | 对类型无效的操作 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
OverflowError | 数值运算超出最大限制 |
FloatingPointError | 浮点计算错误 |
BaseException | 所有异常的基类 |
SystemExit | 解释器请求退出 |
Exception | 常规错误的基类 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
EOFError | 没有内建输入,到达EOF 标记 |
EnvironmentError | 操作系统错误的基类 |
WindowsError | 系统调用失败 |
LookupError | 无效数据查询的基类 |
KeyError | 映射中没有这个键 |
MemoryError | 内存溢出错误(对于Python 解释器不是致命的) |
UnboundLocalError | 访问未初始化的本地变量 |
ReferenceError | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时错误 |
NotImplementedError | 尚未实现的方法 |
SyntaxError Python | 语法错误 |
TabError | Tab 和空格混用 |
SystemError | 一般的解释器系统错误 |
UnicodeError | Unicode 相关的错误 |
UnicodeDecodeError | Unicode 解码时的错误 |
UnicodeEncodeError | Unicode 编码时错误 |
UnicodeTranslateError | Unicode 转换时错误 |
以下为警告类型 | |
Warning | 警告的基类 |
DeprecationWarning | 关于被弃用的特征的警告 |
FutureWarning | 关于构造将来语义会有改变的警告 |
OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
PendingDeprecationWarning | 关于特性将会被废弃的警告 |
RuntimeWarning | 可疑的运行时行为(runtime behavior)的警告 |
SyntaxWarning | 可疑的语法的警告 |
UserWarning | 用户代码生成的警告 |
详见:help(builtins) |
练习:
写一个函数 get_score() 来获取学生成绩,
要求用户输入 1~100的整数,输果输入出现异常,返此函数返回0,
否则返回用户输入的成绩
示例:
def get_score():
...
score = get_score()
print("学生的成绩是:", score)
练习:
1. 一个球从100米高空落下 ,每次落地后反弹高度是原高度的一半, 在落下
1)写程序算出皮球在第10次落地后反弹高度是多高?
2)打印出球共经过多少米的路程
答案:
def ball(n, m):L = [100]while True:if n == 0:print("最后弹起的高度是%s米" % s)breaks = m * 0.5m = sL.append(s + m)n -= 1return L print("10次共经历了%s米的路程" % sum(ball(10, 100)))
2. 分解质因数, 输入一个整数, 分解质因数 ,
如:
输入 90
则打印:
“90=2*3*3*5”
(质因数是指最小能被原数整除的素数 不包括1)
答案:
def m(n):ret = []while n > 1:for i in range(n):k = i + 2if n % k == 0:ret.append(k)n = int(n / k)breakreturn retprint(m(90))
3. 修改原学生信息管理程序,加入异常处理语句,让程序在任何情况下都能够按逻辑正常执行.
例如:
输入成绩和年龄时,如果用户输入非法字符串也不会导致程序崩溃
转载于:https://www.cnblogs.com/ParisGabriel/p/9338724.html
Python全栈工程师(异常(基础))相关推荐
- python全栈工程师 pdf_python全栈工程师项目开发实例实战入门教程百度云
python全栈工程师项目开发实例实战入门教程百度云 课程目录: 开学典礼 pycharm的基本使用 Python基本语法 数值类型数据及运算 字符串的基本操作 字符串的常用方法 列表的基本使用 列表 ...
- Python全栈工程师-第1周-韦玮-专题视频课程
Python全栈工程师-第1周-1583人已学习 课程介绍 Python全栈工程师-第1周 课程收益 Python全栈工程师培养课程 讲师介绍 韦玮 更多讲师课程 ...
- Python 全栈工程师必备面试题 300 道(2020 版)
2020元旦巨献,面试升级必备!献给正在学习Python的同学! Python 全栈工程师必备面试题 300 道(2020 版) Python 面试不仅需要掌握 Python 基础知识和高级语法,还会 ...
- python全栈工程师薪水_不止 20K,Python 工程师薪资再飙升(内附转型指南)
原标题:不止 20K,Python 工程师薪资再飙升(内附转型指南) Python 诞生之初就被誉为最容易上手的编程语言.进入火热的 AI 人工智能时代后,它也逐渐取代 Java,成为编程界的头牌语言 ...
- 案例驱动python编程入门-郑州高薪python全栈工程师
阶段一.Python 全栈工程师之必知必会 - 前端开发技术 课程一.入门必备 - 新手学 HTML5+CSS3 1.HTML基本标签 2.W3C标准及XHTML1.0基本规范 3.表格.表单及框架 ...
- python全栈工程师薪水_python全栈+爬虫+自动化+AI=python全能工程师-挑战年薪30W+
如果你想选择一种语言来入门编程,那么Python绝对是首选! Python非常接近自然语言,精简了很多不必要的分号和括号,非常容易阅读理解.编程简单直接,更适合初学编程者,让其专注于编程逻辑,而不是困 ...
- 2017最新整理python全栈工程师系统培训之路精品课程(全套)
百度搜索"一起自学吧"做大数据专家,不做第一,只做唯一. 课程介绍: 本课程由一起自学吧论坛打造,目的是给想成为Python全栈工程师的同学提供一套完整,全面而系统的培训课程,课程 ...
- Python全栈工程师-第14周-韦玮-专题视频课程
Python全栈工程师-第14周-136人已学习 课程介绍 Python全栈工程师 课程收益 Python全栈工程师 讲师介绍 韦玮 更多讲师课程 企业家,IT ...
- Python全栈工程师-第2周(新)-韦玮-专题视频课程
Python全栈工程师-第2周(新)-256人已学习 课程介绍 Python全栈工程师-第2周(新),爬虫部分 课程收益 Python全栈工程师 讲师介绍 韦玮 更多讲 ...
- Python全栈工程师-第2周-韦玮-专题视频课程
Python全栈工程师-第2周-677人已学习 课程介绍 Python全栈工程师-第2周 课程收益 Python全栈工程师培养 讲师介绍 韦玮 更多讲师课程 企 ...
最新文章
- qchart画完以后删除_Unity2019基础教程:TileMap搭建像素画场景关卡
- android配置文件说明
- Netflix网关zuul(1.x和2.x)全解析
- 采购订单增强(根据公司代码、采购订单类型等相关订单信息给采购订单税码设置默认值)
- Hibernate----Hibernate小配置
- web容器(03):Nginx配置负载均衡
- 孤傲授权系统网站源码
- SpringBoot (14)---使用Redis缓存
- Spring Security Oauth2 之密码模式
- react离开页面,自定义弹框拦截,路由拦截
- 杭电oj1257最少拦截系统(贪心)
- 最流行的 .NET 反编译工具合集
- git提交中target等目录忽略与取消忽略
- 百度云图片识别(ImageRecognition)
- word文档打对勾_word文档怎么打勾 word文档方框内打勾六种方法介绍
- 【生活随笔】研究生如何学习
- 送一些专属红包封面。
- 基于IOS音乐播放器在线歌词同步小程序系统(音乐小程序)
- 批量更改Excel文件中大量工作表的内容(修改公司一千多份excel表格)
- 七夕学习礼物:轻巧好用的讯飞智能录音笔SR101
热门文章
- SAP CRM PPR调试截图,头都搞大了,希望这问题这辈子只遇到这次
- Association, Composition and Aggregation in UI5, CRM, S/4HANA and C4C
- vue 如何将参数放到连接上_通过Vue路由传参的两种方式及Vue组件中接收参数的方式...
- php mariadb 查询语法,从PHP调用的查询中的MySQL(MariaDB)执行超时
- php代码在线base64解码,Base64在线编码解码实现代码 演示与下载
- html5求6的阶乘,.net 求数的阶乘
- 虚拟机克隆改变IP地址,配置环境及免密设置
- java整数四则运算课设_用面向对象方法设计实现整数的四则运算(java)
- 理论计算机科学研究生,清华大学理论计算机科学中心姚期智组招收保送研究生,请帮忙发到虎...
- 非文学翻译理论与实践_北外“欧洲非通用语文学翻译与研究中心”正式成立