异常是在程序执行过程中发生的影响程序运行的事件,是在程序运行中发生的错误,本文将介绍常见异常类型及异常处理的相关操作
常见异常类型
1.TypeError:当操作或函数应用于不适当类型的对象时引发,如
a=1+'1' # TypeError: unsupported operand type(s) for +: 'int' and 'str'
2.ValueError:当函数或操作的参数具有正确的类型但不合法时引发,如
int('abc') #ValueError: invalid literal for int() with base 10: 'abc'
3.NameError:当尝试访问一个未定义的变量时引发,如
print(x) # NameError: name 'x' is not defined
4.IndexError:当尝试访问列表、元组或字符串中不存在的索引时引发,如
a=[1,2,3]
print(a[3]) # IndexError: list index out of range
5.KeyError:当尝试访问字典中不存在的键时引发,如
d={'a':1,'b':2}
print(d['c']) # KeyError: 'c'
6.ZeroDivisionError:当尝试除以零时引发,如
a=1/0 # ZeroDivisionError: division by zero
7.IOError:当尝试读取不存在的文件或无法访问文件时引发,如
f=open('nonexistent_file.txt', 'r') # IOError: [Errno 2] No such file or directory: 'nonexistent_file.txt'
8.ImportError:当尝试导入不存在的模块或包时引发,如
import nonexistent_module # ImportError: No module named 'nonexistent_module'
9.AttributeError:当尝试访问对象不存在的属性时引发,如
a='abc'
print(a.uppercase()) # AttributeError: 'str' object has no attribute 'uppercase'
10.KeyboardInterrupt:当用户中断程序执行时引发,如
while True:
try: x = input('Enter a number: ')
break
except KeyboardInterrupt:
print('You pressed Ctrl+C!') # ctrl+c是终止程序的快捷键
异常处理:当程序出现异常时让程序仍能正常运行
try:
异常代码
except (Exception): #与finally块至少出现一个
上面代码出现对应异常类型时执行的代码,没有标明异常类型则出现异常就执行
else: #可选块
未出现异常执行代码
finally: #与except块至少出现一个
上面执行完成后执行代码
其中except块和finally块至少出现一个,else块可选
可以用 except 异常类型: 筛选捕获特定异常时才执行,except Exception: 则是捕获所有异常,print(Exception可以输出异常信息
其他操作
异常的传递:函数中出现异常会将异常作为返回值传给调用方,直到传递到主程序仍没有异常处理才会终止程序,因此函数也可以作为try中的检测异常代码
抛出异常:raise 异常类型("异常现象语句")主动触发异常现象,可以自定义异常触发的类型和信息,常用于 if 结构中对检测特定条件触发异常输出
raise Exception("抛出异常") # 输出“Exception:抛出异常”