十九. Python基础(19)--异常
十九. Python基础(19)--异常
1 ● 捕获异常
if VS异常处理: if是预防异常出现, 异常处理是处理异常出现 异常处理一般格式: try: <...............> #可能得到异常的语句 except <.......>: #捕获是哪种异常 <...............> #出现异常的处理方法 except <.......>: #捕获是哪种异常 <...............> #出现异常的处理方法 else: < ............... > # 没有出现异常的处理方法 finally: < ............... > # 最后一定会执行的语句 |
try: #lst = [2,4,6] #print(lst.index(5)) print("##########") # 如果上面的语句触发异常, 这一句不再执行, 下面的语句也都不会执行, 但是finally语句块的语句会执行 print(sum(1,2,3)) print("##########") f =open('file.txt') # 如果上面的语句出错, 这一句就不会执行了, finally里面的语句也会因此提示出错. print(f.read()) # 程序出现异常后, 会按照下面的顺序依次匹配, 最先匹配到哪个异常就捕获哪个异常. # 在我们不能完全明确地知道这个错误到底是发生了什么的时候, 就用as 变量名, 将变量中储存的错误信息打印出来. except ValueError as msg: # 或者写成except ValueError, msg print("5不在列表中:", msg) # 5不在列表中: 5 is not in list # 如果写成: except ValueError: 那么就不会打印python内部的定义的错误提示. except Exception as e: print("出现某种异常:", e) # 出现某种异常: sum expected at most 2 arguments, got 3 # Exception是万能异常类,对于可预见的异常错误, 我们最好用已知的异常类型. 否则才用万能异常类. # 上面的print(sum(1, 2, 3))这一句实际上触发了TypeError异常, 所以最好把Exception改为TypeError else: # try代码块中没有捕获到异常的时候才会执行 print("程序没有出现异常!") finally: # finally代码块中的代码一定会执行; 主要做清理的工作, 把之前的打开的链接, 文件等关闭掉. f.close() # 如果连用else和finally, else要写在finally之前. |
2 ● 自定义异常 & 类抛出异常
raise语句(比if 语句更暴力, 捕获异常后, 直接停止程序) |
class MyError(BaseException): def __init__(self, msg): self.msg = msg def __str__(self): return self.msg
file_name = input("pls input file name:")
if file_name == 'hello': raise MyError('file name can\'t be "hello"!')
''' pls input file name:hello Traceback (most recent call last): File "D:/python_projects/s7code/day21/test_day21.py", line 172, in <module> raise MyError('file name can\'t be "hello"!') __main__.MyError: file name can't be "hello"! '''
# 程序要求用户输入一个文件名, # 如果用户输入的文件名是hello, 那么抛出一个NameError的异常 # 用户输入hello 和MyError异常之间没有任何必然联系 # 我们只是人为的通过raise来这样定义 # 我们当然也可以定义成TypeError或其它名称, 但我定义的异常类型必须是python提供的或派生的 |
3 ● assert语句
1、assert语句用来声明某个条件是真的。 2、如果你非常确信某个条件为真(比如数学公理之类的),而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句。 3、当assert语句失败的时候,会引发一AssertionError。 |
def KelvinToCelsius(t): assert (t >= 0), "Colder than absolute zero!" return t - 273
print(KelvinToCelsius(1)) # -272 print(KelvinToCelsius(-5)) # AssertionError: Colder than absolute zero!
# 注意, assert语句可以写成assert t>= 0,"Colder than absolute zero!", # 但不能写成assert((Temperature >= 0),"Colder than absolute zero!") # 因为在python2,3中,assert都是一个语句(statement) # 不像print在python3中变成了一个函数。 |
4 ● except:pass
except: pass # 如果在循环体内, 这个pass要写成pass # 程序捕获到异常时, 直接退出程序, 这是个不好的编程习惯, 但要了解这种写法. |
十九. Python基础(19)--异常的更多相关文章
- 十八. Python基础(18)常用模块
十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...
- 十二. Python基础(12)--生成器
十二. Python基础(12)--生成器 1 ● 可迭代对象(iterable) An object capable of returning its members one at a time. ...
- 九. Python基础(9)--命名空间, 作用域
九. Python基础(9)--命名空间, 作用域 1 ● !a 与 not a 注意, C/C++可以用if !a表示if a == 0, 但是Python中只能用if not a来表示同样的意义. ...
- 二十六. Python基础(26)--类的内置特殊属性和方法
二十六. Python基础(26)--类的内置特殊属性和方法 ● 知识框架 ● 类的内置方法/魔法方法案例1: 单例设计模式 # 类的魔法方法 # 案例1: 单例设计模式 class Teacher: ...
- 二十五. Python基础(25)--模块和包
二十五. Python基础(25)--模块和包 ● 知识框架 ● 模块的属性__name__ # my_module.py def fun1(): print("Hello& ...
- 二十四. Python基础(24)--封装
二十四. Python基础(24)--封装 ● 知识结构 ● 类属性和__slots__属性 class Student(object): grade = 3 # 也可以写在__slots ...
- 二十二. Python基础(22)--继承
二十二. Python基础(22)--继承 ● 知识框架 ● 继承关系中self的指向 当一个对象调用一个方法时,这个方法的self形参会指向这个对象 class A: def get(s ...
- 十六. Python基础(16)--内置函数-2
十六. Python基础(16)--内置函数-2 1 ● 内置函数format() Convert a value to a "formatted" representation. ...
- 十五. Python基础(15)--内置函数-1
十五. Python基础(15)--内置函数-1 1 ● eval(), exec(), compile() 执行字符串数据类型的python代码 检测#import os 'import' in c ...
随机推荐
- Angular 学习笔记 ( 创建 library, 转换老旧的 library )
更新 : 2018-10-28 不知道为什么在 ng 跑一直做不到 .d.ts 最后发现,如果有一个插件 propagating-hammerjs.ts 那么就在 root create 一个 pro ...
- python中socket模块详解
socket模块简介 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket通常被叫做"套接字",用于描述IP地址和端口,是一个通信 ...
- 2017-2018-2 20165327 实验二 《Java面向对象程序设计》实验报告
20165327<Java程序设计>实验二 <Java面向对象程序设计>实验报告 实验二 <Java面向对象程序设计> 一.实验报告封面 课程:Java程序设计 班 ...
- 【debug、info、warn、error】四者之间的区别与用法
debug:需要在调试过程中输出的信息,但发布后是不需要的(当然发布后,也是看不到的) info:需要持续输出的信息(无论调试还是发布状态) warn:警告级别的信息(不严重) error:错误信息( ...
- 20170912多线程Python爬取图片
import threading #导入线程 from urllib import request #导入网页请求模块 import re #导入正则表达式模块 import os # 引入模块 fr ...
- es-aggregations聚合分析
聚合分析的格式: "aggregations" : { "<aggregation_name>" : { "<aggregation ...
- 4.1.4 Nim
Problem description: 有n堆石子,每堆各有ai颗石子.A和B轮流从非空的石子堆中取走至少一颗石子.A先取,取光所有石子的一方获胜.当双方都采用最佳策略时,谁会获胜? 1<=n ...
- 【洛谷p1258】小车问题
(……吓人,心有余悸) 小车问题[传送门] 洛谷算法标签:: (行吧它居然是个二分[解方程的我抖抖发瑟]) 作为一个写了一页演草纸才解出来的方程,显然我要好好写一写(希望不会半途而废) 思路: 先把其 ...
- hadoop常见面试题
Q1.什么是 Hadoop? Hadoop 是一个开源软件框架,用于存储大量数据,并发处理/查询在具有多个商用硬件(即低成本硬件)节点的集群上的那些数据.总之,Hadoop 包括以下内容: HDFS( ...
- 函数使用四:采购发票MIRO BAPI_INCOMINGINVOICE_CREATE
1. 业务处理(transaction)字段选择: 创建后续借记(subsequent debit) ItemData DE_CRE_IN ...