异常和异常类
>>> 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
>>> if a<0:raise ValueError("数值不能为负数")
#Traceback (most recent call last):
#File "", line 1, in
#if a<0:raise ValueError("数值不能为负数")
#ValueError: 数值不能为负数
raise [exceptionName [(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("程序正常运行,没有捕捉到异常")
创建一个继承Exception类的子类,就是自定义异常类。
当遇到自己设定的错误时,使用raise语句抛出自定义的异常。
class ShortInputException(Exception):
def __init__(self, length, atleast):
Exception.__init__(self)
self.length = length
self.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 布尔表达式 ,<描述性字符>||Vif not 布尔表达式:raise AssertionError(<描述性字符串>)
>>> 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'