异常和异常类
>>> print("我爱山大"}
SyntaxError: invalid syntax
>>> 1/0
ZeroDivisionError: division by zero
>>> from math import sqrt
>>> a=1;b=2;c=3
>>> x1=-b+sqrt(b**2-4*a*c)/2*a
math domain error
(1)NameError。尝试访问一个未申明的变量。
>>> noname #报错。NameError: name 'noname' is not defined
(2)SyntaxError。语法错误。
>>> int a #报错。SyntaxError: invalid syntax
(3)AttributeError。访问未知对象属性。
>>> a=1
>>> a.show() #报错。AttributeError: 'int' object has no attribute 'show'
(4)TypeError。类型错误。
>>> 11 + 'abc' #报错。TypeError: unsupported operand type(s) for +: 'int' and 'str'
(5)ValueError。数值错误。
>>> int('abc') #报错。ValueError: invalid literal for int() with base 10: 'abc’ (6)ZeroDivisionError。零除错误。
>>> 1/0 #报错。ZeroDivisionError: division by zero
(7)IndexError。索引超出范围。
>>> a=[10,11,12]
>>> a[3] #报错。IndexError: list index out of range
(8)KeyError。字典关键字不存在。
>>> m = {'1':'yes', '2':'no'}
>>> m['3'] #报错。KeyError: '3'
异常名称 | 描述 |
ZeroDivisionError | 除(或取模)零(所有数据类型) |
NameError | 未声明/初始化对象(没有属性) |
SyntaxError | 解释器发现语法错误 |
IndexError | 序列中不存在的索引 |
KeyError | 使用映射中不存在的键 |
FileNotFoundError | 试图打开不存在的文件 |
AttributeError | 尝试访问未知对象属性 |
IndentationError | 缩进错误 |
TabError | Tab 和空格混用 |
ImportError | 导入模块/对象失败 |
IOError | 输入/输出操作失败 |
AssertionError | 断言语句失败 |
>>> 1/0
Traceback (most recent call last):
File "", line 1, in 1/0
ZeroDivisionError: division by zero
使用raise语句主动抛出异常. >>> if a<0:raise ValueError("数值不能为负数")#Traceback (most recent call last):
#File "", line 1, in
#if a<0:raise ValueError("数值不能为负数")
#ValueError: 数值不能为负数
raise [exceptionName [(reason)]]• exceptionName指定异常的名字,是Error或Exception类的子类。 • reason对异常的描述。
#实例
>>> if a<0: raise ValueError("数值不能为负数")
raise IndexError
Traceback (most recent call last):
File "", line 1, in
raise IndexError
IndexError
通过显示地创建异常类的对象, 直接使用对象来引发异常。
index = IndexError() raise index
Traceback (most recent call last):
File "", line 1, in
raise index
IndexError
raise IndexError("索引下标超出范围")
Traceback (most recent call last):
File "D:/异常.py", line 1, in
raise IndexError("索引下标超出范围")
IndexError: 索引下标超出范围
try:num1 = input('请输入第1个数:')num2 = input('请输入第2个数:')print(int(num1)/int(num2))
# 放在所有except语句最后
except Exception as result:print('捕获到异常:%s'%result)
try:num1 = input("请输入第1个数:")num2 = input("请输入第2个数:")print(int(num1)/int(num2))
except Exception as result:print("捕捉到异常:%s"%result)
else:print("程序正常运行,没有捕捉到异常")
import time
try:f = open('test.txt',"w+")while True:content = f.read()if len(content) == 0:breaktime.sleep(2)print(content)
finally:f.close()print('关闭文件')
创建一个继承Exception类的子类,就是自定义异常类。
当遇到自己设定的错误时,使用raise语句抛出自定义的异常。
class ShortInputException(Exception):def __init__(self, length, atleast):Exception.__init__(self)self.length = lengthself.atleast = atleast
try:s = input('请输入 --> ')if len(s) < 3:raise ShortInputException(len(s), 3)
except EOFError:print ('你输入了一个结束标记EOF')
except ShortInputException as x:print ('ShortInputException: 长度是 %d, 至少应是 %d' % (x.length, x.atleast))
else:print ('没有异常发生.')
Python官方讲解exception类
assert 布尔表达式 ,<描述性字符> || V if not 布尔表达式: raise AssertionError(<描述性字符串>)assert后面紧跟一个布尔表达式,相当于条件。描述性字符串是当条件为false时作 为异常的描述信息。
>>> a = 0
>>> assert a!=0,"a的值不能为0"
Traceback (most recent call last):
File "D:/异常.py", line 2, in assert a!=0,"a的值不能为0"
AssertionError: a的值不能为0
实例
>>> if 1>2
SyntaxError: invalid syntax
>>> x
NameError: name 'x' is not defined
>>> f=open("123.txt")
FileNotFoundError: [Errno 2] No such file or directory: '123.txt'
>>> 123+"abc"
TypeError: unsupported operand type(s) for +: 'int' and 'str'
单条语句调试
函数调试
传送门:Python全套学习笔记
下一篇:文件操作【C语言】