python 异常
2018-09-29 03:57:55来源:博客园 阅读 ()
导航:
1、语法错误
2、异常
3、异常处理
4、异常的传递
5、抛出异常
6、在异常处理中抛出异常
python的异常分为两种,1)、语法错误,在python解释器的语法检测中不通过不能运行代码 2)、异常,python程序运行期检测到的错误被称为异常。在没有做异常处理时,将终止程序并提示异常信息,如:①字符串转换为数字时的类型转换异常,②文件读取时的文件不存在异常,③网络链接时主机不可达异常···等。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。毕竟谁也不希望用着的程序突然的就崩了
1、语法错误
python的语法错误是很多初学者经常遇到的一个问题,这类错误比较低级,只要多敲几遍代码就可以减少这样的错误
1 >>> if Trur 2 File "<stdin>", line 1 3 if Trur 4 ^ 5 SyntaxError: invalid syntax 6 >>> print("as")) 7 File "<stdin>", line 1 8 print("as")) 9 ^ 10 SyntaxError: invalid syntax
如:出现这样的错误就是语法错误,第1行结尾if语句缺少 ":",第6行结尾多了 ")"
2、异常
1)运行期检测到的错误被称为异常,python的语法检测无法检查这样的错误。
1 >>> int("aa") 2 Traceback (most recent call last): 3 File "<stdin>", line 1, in <module> 4 ValueError: invalid literal for int() with base 10: 'aa' 5 >>> f = open("aaa.txt","r") 6 Traceback (most recent call last): 7 File "<stdin>", line 1, in <module> 8 FileNotFoundError: [Errno 2] No such file or directory: 'aaa.txt'
其中第1行,第5行都是出现异常的地方,看一下异常的输出信息,如下图
2)python的标准异常类
BaseException 为所有异常的基类,Exception 为常规错误的基类
其它python的异常类可以到这里看(http://www.runoob.com/python/python-exceptions.html),就不再一一的述说,也可以百度查看
3、异常处理
为了提高程序的健壮性,不让程序出现异常时出现崩溃的情况,在必要时需要进行异常处理
1)try-except:语句
①、最简单的异常处理语句如下,当try的语句块中有异常出现时,下边的的语句将不再执行(第3行),异常被except捕获,执行except中的语句块后继续向下执行程序(如第6行)。注:except后边不跟异常的类型,默认捕捉所有的异常
1 try: 2 int("aaa") 3 print("---aaa---") 4 except: 5 print("出现异常-->英文字母不能转换为数字") 6 print("----------") 7 8 9 # 输出结果 10 出现异常-->英文字母不能转换为数字 11 ----------
②、多分支异常,当我们需要捕获不同的异常时可以用多个except来实现,需要获取异常的信息可通过as 变量名得到异常的对象,如第7行
1 try: 2 nu = int("100") 3 print("转换后的值nu:", nu) 4 i = 1 / 0 5 except ValueError: 6 print("出现异常-->英文字母不能转换为数字") 7 except ZeroDivisionError as e: # 通过 as 变量名 获取异常的对象 8 print("出现异常-->除数不能为零") 9 print("异常的提示信息-->", e) 10 except: 11 pass 12 print("----------") 13 14 15 # 输出结果 16 转换后的值nu: 100 17 出现异常-->除数不能为零 18 异常的提示信息--> division by zero 19 ----------
③、当我们需要将多个异常按相同的处理方式可以使用 except (ValueError, [ZeroDivisionError [, NameError]]):
1 try: 2 i = 1 / 0 3 nu = int("aa") 4 except (ValueError, ZeroDivisionError) as e: 5 print(e) 6 except: 7 pass 8 print("----------") 9 10 11 # 输出结果 12 division by zero 13 ----------
2)try-except-else-finally 语句
①、当try-except-else-finally中出现了finally语句,不管是否出现异常finally语句块中的语句一定会执行,而else中的语句只有不出现异常是才会执行
出现异常时try-except-else-finally如下
1 try: 2 i = 1 / 0 3 print("没有出现异常i值", i) 4 except Exception as e: 5 print("出现异常-->", e) 6 else: 7 print("没有出现异常-->执行else") 8 finally: 9 print("不管是否出现异常,这里的语句一定会被执行") 10 11 12 # 输出结果 13 出现异常--> division by zero 14 不管是否出现异常,这里的语句一定会被执行
没有出现异常时try-except-else-finally如下
1 try: 2 i = 1 / 1 3 print("没有出现异常i值", i) 4 except Exception as e: 5 print("出现异常-->", e) 6 else: 7 print("没有出现异常-->执行else") 8 finally: 9 print("不管是否出现异常,这里的语句一定会被执行") 10 11 12 # 输出结果 13 没有出现异常i值 1.0 14 没有出现异常-->执行else 15 不管是否出现异常,这里的语句一定会被执行
②、try-except-else-finally还可以拆开使用,有三种形式 1)try-except-finally 2)try-except-else 3)try-finally。 这里就不展示代码了
4、异常的传递
在发生异常的语句中没有处理异常的语句,异常将向上层传递,直到遇到处理异常的语句,或python解释器终止程序
1 def test2(): 2 int("aa") 3 4 def test1(): 5 test2() 6 7 try: 8 test1() 9 except Exception as e: 10 print(e) 11 print("-----------") 12 13 14 # 输出结果 15 invalid literal for int() with base 10: 'aa' 16 -----------
如上test2中第2行出现异常,将向第5行调用test2的语句处传递,这里依旧没有异常处理语句,将继续往上层传递到第8行处被except捕获
5、抛出异常 raise
1)抛出python已定义的异常
通过raise 异常类型即可抛出一个异常,抛出的异常也会被except捕获到。如下边第4行
1 age = 500 2 try: 3 if age < 0 or age > 200: 4 raise ValueError("age范围0-200") 5 print("age", age) 6 except ValueError as e: 7 print("出现异常-->", e) 8 9 10 # 输出结果 11 出现异常--> age范围0-200
2)抛出自定义异常
抛出自定义异常首先得有个自定义的异常类,注:自定义的异常必须直接或间接的继承Exception基类
1 class MyException(Exception): # 自定义异常类 2 def __init__(self, msg): 3 self.msg = msg 4 5 6 age = 500 7 try: 8 if age < 0 or age > 200: 9 raise MyException("age范围0-200") # 抛出自定义异常 10 print("age", age) 11 except MyException as e: 12 print("出现异常-->", e) 13 14 15 # 输出结果 16 出现异常--> age范围0-200
当然自定义异常类也可以拥有许多的功能,就得看需求添加啦
6、在异常处理中抛出异常
有某需求:当捕获到异常时处理完后想继续抛出异常.....
在except中用raise可以抛出当前异常
1 try: 2 i = 1 / 0 # 异常的语句 3 except Exception as e: 4 print("出现异常-->", e) 5 raise # 处理完后继续抛出异常,raise表示抛出当前异常 6 print("-------------") 7 8 9 # 输出结果 10 出现异常--> division by zero 11 Traceback (most recent call last): 12 File "<stdin>", line 2, in <module> 13 i = 1 / 0 14 ZeroDivisionError: division by zero
注:异常处理尽量在需要的时候再使用,使用太多会影响代码的可读性
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash