十九. 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

# 程序捕获到异常时, 直接退出程序, 这是个不好的编程习惯, 但要了解这种写法.

转载于:https://www.cnblogs.com/ArrozZhu/p/8393748.html

十九. Python基础(19)--异常相关推荐

  1. [Python从零到壹] 三十九.图像处理基础篇之图像几何变换(镜像仿射透视)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  2. 九. Python基础(9)--命名空间, 作用域

    九. Python基础(9)--命名空间, 作用域 1 ● !a 与 not a 注意, C/C++可以用if !a表示if a == 0, 但是Python中只能用if not a来表示同样的意义. ...

  3. 十五. Python基础(15)--内置函数-1

    十五. Python基础(15)--内置函数-1 1 ● eval(), exec(), compile() 执行字符串数据类型的python代码 检测#import os 'import' in c ...

  4. 二十六. Python基础(26)--类的内置特殊属性和方法

    二十六. Python基础(26)--类的内置特殊属性和方法 ● 知识框架 ● 类的内置方法/魔法方法案例1: 单例设计模式 # 类的魔法方法 # 案例1: 单例设计模式 class Teacher: ...

  5. Python基础(10) - 异常

    Python 异常:程序出现了错误而在正常控制流以外采取的行为 Python中常见的异常: 1. NameError:尝试访问一个未声明的变量 >>> something Trace ...

  6. Python基础19(random模块)

    random模块(随机数模块) 导入random模块方法 import random random模块使用方法 1 >>> import random 2 #随机小数 3 >& ...

  7. python基础教程----异常

    1.什么是异常 Python用异常对象来表示异常,遇到错误后,会引发异常,如果异常对象并未被处理或捕捉,程序会用所谓的回溯终止执行. 2.按自己的方式出错 如何引发异常,甚至创建自己的异常类型 2.1 ...

  8. [Python图像处理] 三十九.Python图像分类万字详解(贝叶斯图像分类、KNN图像分类、DNN图像分类)

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  9. python基础19 -------面向对象终结篇(介绍python对象中各种内置命令)

    一.isinstance()和issubclass()命令 1.isinstance(对象,类型) 用来判定该对象是不是此类型或者说是该对象是不是此类的对象,返回结果为True和False,如图所示. ...

最新文章

  1. 紫色回归线:雅虎中国的运筹学
  2. ubuntu16.04 cuda9.0 cudnn Tensorflow GPU 1.10.0
  3. cookie的路径和域
  4. SVN钩子--hook
  5. linux安装12c oem,OEM12C(12.1.0.5)安装插件监控mysql(linux)
  6. 搭建认证服务器 - Spring Security Oauth2.0 集成 Jwt 之 【授权码认证流程】 总结
  7. rome rss_RSS阅读器使用:ROME,Spring MVC,嵌入式Jetty
  8. Hadoop—如何查看HDFS默认的ns命名空间和所有命名空间列表
  9. 史上最全的CSS hack方式一览(鉴)
  10. C++编程积累——C++实现十进制与十六进制之间的互相转换
  11. js方法的使用(z)
  12. 致敬那些用键盘改变世界的劳动者
  13. Apache-Shiro-会话管理
  14. vue项目部署的一些配置和流程
  15. 华为hcip认证考试题库有哪些内容?华为hcip认证考试题库试题举例
  16. 台式电脑主板插线步骤图_图解电脑主机电源线接法图解
  17. PAZU -- 4Fang WEB 打印控件
  18. 例举计算机网络连接的主要对象,《计算机网络技术基础教程》课后习题答案_刘四清版...
  19. 区块链签章 + 云签约 让合同的法律效力无懈可击
  20. java 枚举 静态_Java 静态内部类和枚举(银联支付)

热门文章

  1. 致技术创业的朋友:其实销售很简单(Z)
  2. MSP430F5XXX中的ADC12使用
  3. C#使用HttpClient进行http操作
  4. 大批工厂提前20天放假,而大家却都在玩金融
  5. 《北妹》:中国七零后作家的一次火山喷发(答记者问)
  6. 就是想让你无法无动于衷:观瑞士的“行为艺术”
  7. Visual Basic团队透露将为VB添加迭代器
  8. android webview 禁止放大缩小,WebView无法放大缩小解决方案
  9. 线性共轭梯度法python_python实现的共轭梯度法
  10. 大唐发电厂计算机考试题,全国计算机等级考试上机考试与题库解析:一级B