鱼C论坛

 找回密码
 立即注册
查看: 1578|回复: 0

[技术交流] 《零基础学习Python》32异常处理:你不可能总是对的(Exception)

[复制链接]
发表于 2017-9-10 12:42:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 只为 于 2017-9-10 13:01 编辑

1、Exception
程序出现逻辑错误或者用户输入不合法都会引发错误,但这些错误并不是致命的,不会导致程序崩溃死掉。我们完全可以利用Python提供的异常机制,在错误出现的时候,程序可以内部自我消化掉。

2、Python标准异常总结
(小甲鱼链接:http://bbs.fishc.com/forum.php?m ... peid%26typeid%3D403
1)AssertionError:断言语句(assert)失败
注:
i.当assert后的条件为False时,程序自动抛出该异常(第八讲提到过?)
ii.assert语句的用途主要是用于测试中,测试某个点
  1. >>> assert 0
  2. Traceback (most recent call last):
  3.   File "<pyshell#0>", line 1, in <module>
  4.     assert 0
  5. AssertionError
复制代码


2)AttributeError:尝试访问未知的对象属性(或者方法)
  1. >>> list1 = []
  2. >>> list1.fishc()
  3. Traceback (most recent call last):
  4.   File "<pyshell#3>", line 1, in <module>
  5.     list1.fishc()
  6. AttributeError: 'list' object has no attribute 'fishc'
复制代码


3)IndexError:索引超出序列的范围
4)KeyError:字典众查找一个不存在的关键字
  1. >>> my_dict = {'one':1,'two':2,'three':3}
  2. >>> my_dict['one']
  3. 1
  4. >>> my_dict['four']
  5. Traceback (most recent call last):
  6.   File "<pyshell#6>", line 1, in <module>
  7.     my_dict['four']
  8. KeyError: 'four'
  9. >>> my_dict.get('four')
  10. >>>
复制代码

注:字典中通过key取值时,可以使用get方法,防止KeyError异常

5)NameError:尝试访问一个不存在的变量
  1. >>> a
  2. Traceback (most recent call last):
  3.   File "<pyshell#8>", line 1, in <module>
  4.     a
  5. NameError: name 'a' is not defined
复制代码


6)OSError:操作系统产生的异常(例如打开一个不存在的文件)
  1. >>> open('s.txt')
  2. Traceback (most recent call last):
  3.   File "<pyshell#9>", line 1, in <module>
  4.     open('s.txt')
  5. FileNotFoundError: [Errno 2] No such file or directory: 's.txt'
复制代码

注:FileNotFoundError 属于OSError一种

7)OverflowError:数值运算超出了最大限制
注:python中一般不会出现,python可以接收很大的数据

8)SyntaxError:Python的语法错误
  1. >>> print 'i love fishc'
  2. SyntaxError: Missing parentheses in call to 'print'
复制代码

注:Python3中print()是一个函数

9)TypeError:不同类型间的无效操作
  1. >>> 1 + '1'
  2. Traceback (most recent call last):
  3.   File "<pyshell#1>", line 1, in <module>
  4.     1 + '1'
  5. TypeError: unsupported operand type(s) for +: 'int' and 'str'
复制代码


10)ZeroDivisionError:除数为零
  1. >>> 1/0
  2. Traceback (most recent call last):
  3.   File "<pyshell#2>", line 1, in <module>
  4.     1/0
  5. ZeroDivisionError: division by zero
复制代码


3、补充Exception
1)TabError:Tab和空格混用使用
2)UnicodeError:Unicode相关的错误(ValueError的子类)
3)ValueError:传入无效的参数
4)FileExistsError:文件已存在错误
5)PermissionError:没有打开文件的权限


4、Python内置异常类的层次结构
提示:Exception包括Warning

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-3 18:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表