异常处理:首先理解异常。 如果程序发生逻辑错误或用户非法输入,则会发生异常。 这些例外并不致命,所以程序不会崩溃而死。 利用Python提供的异常处理机制,发生异常时可以立即捕获,从内部自行消化。
以下示例说明异常:
1 file_name=input (请输入要打开的文件名(: ) ) 2f=open (file _ name,' r ' )3 print )文件内容:')4foreach _ linint
这是一个轻松读取文件内容的示例,当用户输入正确的文件名时,将显示文件内容。 如果输入用户不存在的文件名,代码将引发异常。 以下1.txt不存在:
请输入要打开的文件名:1.txt
跟踪后退(mostrecentcalllast ) :
File 'D:/python/p9_1.py ',line 4,in
f=open(file_name,' r ' ) )。
文件not found error : [ errno2] nosuchfileordirectory : '1. txt '
在上面的示例中,抛出了文件not found error异常。
常见的例外类型包括:
1 .断言错误:断言语句失败
如果assert关键字后面的条件在分支和循环中为假,则程序将停止并抛出AssertionError异常。 通常用于在测试阶段在代码中放置检查点。
1 #判断错误异常
2 my_list=[ '蔡徐坤' ]3assertlen(my_list )0 #长度是否大于0
4print(my_list.pop )弹出窗口
5资产len (my _ list ) 0
跟踪后退(mostrecentcalllast ) :
蔡徐坤
File 'D:/python/9_1_2.py ',line 6,in
资产len (my _ list ) 0
评估错误
2 .属性错误:尝试访问未知的对象属性
1 #属性错误异常
2 my_list=[]3 my_list.wtf
跟踪后退(mostrecentcalllast ) :
File 'D:/python/p9_1_3.py ',line 4,in
my_list.wtf
attribute error : ' list ' objecthasnoattribute ' wtf '
3 .索引错误:索引超出序列范围
1 #索引错误
2my _ list=[ 1,2,3 ] 3my _ list [3]
跟踪后退(mostrecentcalllast ) :
File 'D:/python/p9_1_3.py ',line 8,in
my_list[3]
索引错误: listindexoutofrange
4.KeyError :从词典中查找不存在的关键字
1 #密钥错误
2 my_dict={'one':1,' two':2,' three ' :3 }3print (my _ dict [ ' one ' ] )4print (my _ dict ) )
1
跟踪后退(mostrecentcalllast ) :
File 'D:/python/p9_1_3.py ',line 13,in
print(my_dict['four']
KeyError: 'four '
5.NameError :尝试访问不存在的变量
1 #名称错误
2打印(name )
跟踪后退(mostrecentcalllast ) :
File 'D:/python/p9_1_3.py ',line 16,in
是打印(name )
name error : name ' name ' is not defined
6 .操作系统错误:操作系统中发生的异常
例如,文件不基础错误是OS错误的子类。
7.SynataxError:Python语法错误
如下所示。 所有错误的语法都会抛出更改例外。
1 #SynataxError
2 my_dict=asdxc}
File 'D:/python/p9_1_3.py ',line 18
my_dict=asdxc}
^
Syn
taxError: invalid syntax8.TypeError:不同类型间的无效操作
有些类型不同不能进行相互计算,否则抛出该异常。
1 #TypeError
2 print(1+"1")
Traceback (most recent call last):
File "D:/python/p9_1_3.py", line 22, in
print(1+"1")
TypeError: unsupported operand type(s) for +: 'int' and 'str'
9.ZeroDivisionError:除数为0
1 #ZeroDivisionError
2 print(5/0)
Traceback (most recent call last):
File "D:/python/p9_1_3.py", line 25, in
print(5/0)
ZeroDivisionError: division by zero
异常捕获可以使用try语句来实现,任何出现在try语句范围内的异常都会被及时捕获,有两种实现形式try-except和try-finally。
1 #try-except
2 try:3 f=open("no.txt")4 print(f.read())5 f.close()6 exceptOSError:7 print("文件打开遇到错误!")
现在考虑以下这种情况(yes.txt是一个存在的文件):
1 try:2 f=open("yes.txt")3 print(f.read())4 sum=1+"1"
5 f.close()6 except:7 print("出现错误!")
在sum=1+"1"出现异常,导致程序停止运行,而没有执行必要的f.close()操作需要保存文档,因此引入finally的概念,使必要操作最后得以执行。
1 try:2 f=open("yes.txt")3 print(f.read())4 sum=1+"1"
5 except:6 print("出现错误!")7 finally:8 f.close()
针对不同异常设置多个except:
1 try:2 sum=1+'1'
3 f=open("no.txt")4 print(f.read())5 f.close()6 exceptOSError as reason:7 print("错误原因:"+str(reason))8 exceptTypeError as reason:9 print("错误原因:"+str(reason))
对多个异常统一处理:
1 try:2 sum=1+'1'
3 f=open("no.txt")4 print(f.read())5 f.close()6 except(OSError,TypeError) as reason:7 print("错误出现!原因:"+str(reason))
AttributeError
试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError
输入/输出异常;基本上是无法打开文件
ImportError
无法引入模块或包;基本上是路径问题或名称错误
IndentationError
语法错误(的子类) ;代码没有正确对齐
IndexError
下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError
试图访问字典里不存在的键
KeyboardInterrupt
Ctrl+C被按下
NameError
使用一个还未被赋予对象的变量
SyntaxError
Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError
传入对象类型与要求的不符合
UnboundLocalError
试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError
传入一个调用者不期望的值,即使值的类型是正确的
原文出处:https://www.cnblogs.com/zlc364624/p/11604046.html