捕获异常

python完整的异常处理语法结构如下:

特别说明:

1.try块是必需的,except块和finally,当try块没有出现异常时,程序会执行else块

2.try块后只有一个except快块会被执行,不可能有多个except块被执行。

3.原则:先捕获小异常再捕获大异常

实例:

import sys

try:
a = int(sys.argv[1])
b = int(sys.argv[2])
c = a / b
print("您输入的两个数相除的结果是:",c)
except IndexError:
print("索引错误:运行程序时输入的参数个数不够")
except ValueError:
print("数值错误:程序只能接受整数参数")
except ArithmeticError:
print("算术错误")
except Exception:
print("未知异常") # 输出结果:
E:\myproj\crazy_python\07\7.2>python div_test.py 3 0
算术错误

单异常捕获

import sys

try:
a = int(sys.argv[1])
b = int(sys.argv[2])
c = a / b
print("您输入的两个数相除的结果是:",c)
except (IndexError, ValueError, ArithmeticError):
print("程序发生了数组越界、数字格式异常、算术异常之一")
except:
print("未知异常") # 输出结果
E:\myproj\crazy_python\07\7.2>python multi_exception_test.py 4 0
程序发生了数组越界、数字格式异常、算术异常之一

多异常捕获

def foo():
try:
fis = open("a.txt")
except Exception as e:
print(e)
print(e.args)
print(e.errno)
print(e.strerror) foo() # 输出结果:
[Errno 2] No such file or directory: 'a.txt'
(2, 'No such file or directory')
2
No such file or directory

访问异常信息

4. 1try或except中的return语句,不会影响finally块的执行;但是os._exit()语句会退出python解释器,导致finally块试去执行机会。

import os

def test():
fis = None
try:
fis = open("a.txt")
except OSError as e:
print(e.strerror)
return
os._exit(1)
finally:
if fis is not None:
try:
fis.close()
except OSError as ioe:
print(ioe.strerror)
print("执行finally里的资源回收!") test() # 输出结果:
No such file or directory
执行finally里的资源回收!

finally_1

4.1不能在finally块使用return或raise。finally块中的return或raise语句,会导致try、except块中的return、raise语句失效

def test():
try:
return True # 由于finally中包含return,该return语句失效
finally:
return False a = test()
print(a) # 输出结果
False

finally_2

抛出异常(使用raise引发异常)

不管是系统引发的异常,还是程序员使用raise手动引发的异常,python解释器对异常的处理没有任何差别,都可以使用try...except来捕获它

raise语句有如下三种常用用法:

def main():
try:
mtd(3)
except Exception as e:
print("程序出现异常:", e)
mtd(3) def mtd(a):
if a > 0:
raise ValueError("a的值大于0.不符合要求") main() # 输出结果:
D:\soft\python36\python.exe D:/myproject/crazy_python/07/7.3/raise_test.py
Traceback (most recent call last):
程序出现异常: a的值大于0.不符合要求
File "D:/myproject/crazy_python/07/7.3/raise_test.py", line 17, in <module>
main()
File "D:/myproject/crazy_python/07/7.3/raise_test.py", line 9, in main
mtd(3)
File "D:/myproject/crazy_python/07/7.3/raise_test.py", line 14, in mtd
raise ValueError("a的值大于0.不符合要求")
ValueError: a的值大于0.不符合要求

raise_1

except和raise同时使用

class AuctionException(Exception): pass
class AuctionTest:
def __init__(self, init_price):
self.init_price = init_price
def bid(self, bid_price):
d = 0.0
try:
d = float(bid_price)
except Exception as e:
# 此处只是简单地打印异常信息
print("转换出异常:", e)
# 再次引发自定义异常
# raise AuctionException("竞拍价必须是数值,不能包含其他字符!") # ①
raise AuctionException(e)
if self.init_price > d:
raise AuctionException("竞拍价比起拍价低,不允许竞拍!")
initPrice = d
def main():
at = AuctionTest(20.4)
try:
at.bid("df")
except AuctionException as ae:
# 再次捕获到bid()方法中的异常,并对该异常进行处理
print('main函数捕捉的异常:', ae)
main() # 输出结果:
转换出异常: could not convert string to float: 'df'
main函数捕捉的异常: could not convert string to float: 'df'

except_raise

python学习-异常处理之捕获异常与抛出异常(七)的更多相关文章

  1. python学习-异常处理

    小技巧 isinstance(obj,foo) 检查是否obj是否是类 foo 的对象 class Foo(object): pass obj = Foo() isinstance(obj, Foo) ...

  2. python 学习 异常处理

    异常处理实例 while True: num1 = input('num1:') num2 = input('num2:') try: num1 = int(num1) num2 = int(num2 ...

  3. python学习之路基础篇(第七篇)

    一.模块 configparser configparser用于处理特定格式的文件,其本质是利用open来对文件进行操作 [section1] # 节点 k1 = v1 # 值 k2:v2 # 值 [ ...

  4. python学习笔记之socket(第七天)

         参考文档:              1.金角大王博客:http://www.cnblogs.com/alex3714/articles/5227251.html               ...

  5. Python学习笔记——基础篇【第七周】———类的静态方法 类方法及属性

    新式类和经典类的区别 python2.7 新式类——广度优先 经典类——深度优先 python3.0 新式类——广度优先 经典类——广度优先 广度优先才是正常的思维,所以python 3.0中已经修复 ...

  6. Python学习笔记——基础篇【第七周】———进程、线程、协程篇(socket基础)

    http://www.cnblogs.com/wupeiqi/articles/5040823.htmlhttp://i.cnblogs.com/EditPosts.aspx?postid=55437 ...

  7. Python学习——异常处理

    1.异常基础: 在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面 基本语法: try: pass except Exception as e: pri ...

  8. Python学习笔记——基础篇【第七周】———FTP作业(面向对象编程进阶 & Socket编程基础)

    FTP作业 本节内容: 面向对象高级语法部分 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 参考:http://www.cnblogs.com/wupeiqi/ ...

  9. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

随机推荐

  1. tomcat 中无法添加项目等问题的解决方案

    博客地址:http://www.moonxy.com 一.前言 今天新建了一个 maven 项目,添加程序文件之后,发现无法添加项目,然后修改配置,将应用添加到了 tomcat,启动时又报错,解决出现 ...

  2. 数据库占用CPU过高,性能分析与调优

    一.使用 dstat -tcdlmnsygr --disk-util 查看当前系统资源使用状况,当前cpu使用率100% 二.使用TOP命令 查看当前占用CPU进程,可以看到当前占用CPU进程最高的是 ...

  3. JAVA数据处理的常用技术

    背景 在实际开发中,数据的处理有五种:获取.传输.存储.分析.转换.每种各对应一些常用的技术. 序列化和反序列化 序列化是将对象的信息转换为可传输或可存储形式的过程.反序列化就是反过来让这些可传输的. ...

  4. [Advanced Python] 11 - Implement a Class

    基础概念:[Python] 08 - Classes --> Objects 进阶概念:[Advanced Python] 11 - Implement a Class 参考资源:廖雪峰,面向对 ...

  5. 【linux】linux固定ip

    vi /etc/sysconfig/network-scripts/ifcfg-ens33  ifcfg-ens33为ifconfig显示的网卡名 TYPE="Ethernet"P ...

  6. Java匹马行天下之 Java国出了个Java——举国欢庆

    Java帝国的崛起 前言: 看庭前花开花落,宠辱不惊, 望天上云卷云舒,去留无意. 闹心的事儿,选择释怀: 纠缠的人儿,试着放下, 生活其实很美. 心若向阳,就无惧悲伤. 愿你明朗坦荡纵情豁达,有得有 ...

  7. Tomcat启动报错java.lang.ClassNotFoundException: javax.el.ExpressionFactory

    严重: Context initialization failedorg.springframework.beans.factory.BeanCreationException: Error crea ...

  8. 使用 .gitignore 忽略 Git 仓库中的文件

    .gitignore 在Git中,很多时候你只想将代码提交到仓库,而不是将当前文件目录下的文件全部提交到Git仓库中,例如在MacOS系统下面的.DS_Store文件,或者是Xocde的操作记录,又或 ...

  9. 快学Scala 第一课 (变量,类型,操作符)

    Scala 用val定义常量,用var定义变量. 常量重新赋值就会报错. 变量没有问题. 注意:我们不需要给出值或者变量的类型,scala初始化表达式会自己推断出来.当然我们也可以指定类型. 多个值和 ...

  10. vue-hash-calendar,移动端日期时间选择插件

    按照惯例,先上效果图 vue-hash-calendar 基于 vue 2.X 开发的日历组件 支持手势滑动操作·1 原生 js 开发,没引入第三方库 上下滑动 切换 周/月 模式 [周模式中] 左右 ...