Python常见异常分类与try-except处理机制详解
本文系统梳理Python中常见的异常类型,包括AssertionError、AttributeError、KeyError等,并详细解析try-except-else-finally语句块的执行逻辑。通过四个代码示例,演示如何捕获断言失败、类型错误及IO错误,并强调finally块在资源清理中的关键作用,帮助开发者掌握Python异常处理的最佳实践。
在Python编程中,常见的异常类型主要可以归纳为以下几类:
1. AssertionError:当assert断言表达式的计算结果为False时触发此异常。
2. AttributeError:尝试访问对象上不存在的属性或方法时抛出。
3. IndexError:访问序列(如列表、元组)时索引超出有效范围引发。
4. KeyError:在字典(dict)中查找不存在的键值(key)时产生。
5. NameError:引用未定义的变量或名称时抛出。
6. OSError:由操作系统层面错误引发的异常,如文件操作失败等。
7. SyntaxError:代码语法结构不符合Python规范时抛出。
8. TypeError:对对象执行了不支持的操作类型时触发,通常涉及不同类型间的非法运算。
9. ZeroDivisionError:数学运算中除数为0时抛出。
如需查阅更多异常类型,可参考官方文档:
Python 2.7版本文档链接
Python 3.6版本文档链接
Python异常处理机制:
示例1:异常的最基础捕获方式
#!/usr/bin/python #coding:utf8 #try与except结合用法 a = 1 b = 2 try : assert a > b #如果a>b判断为假时将抛出AssertionError异常 except AssertionError: #如果捕获到AssertionError异常将执行except下面的代码块 print ( "a<b" )
上述代码的输出结果为 'a<b'。这是因为在断言语句中 'a > b' 的判断结果为假,从而触发了AssertionError异常。程序捕获该异常后,立即执行except代码块中的打印语句。
示例2:使用多个except子句捕获不同异常
#!/usr/bin/python #coding:utf8 #try与多个except结合用法,在try代码块中依次执行,只要捕获到异常就停止执行 a = 1 b = 2 c = "1" try : assert a < b d = a + c except AssertionError: print ( "a<b" ) except TypeError,e: #这里的 e 为异常信息 print (e)
上述执行结果为 'unsupported operand type(s) for +: 'int' and 'str'',表示不支持整型与字符串相加。由于前面的断言 'a < b' 为真,不会抛出AssertionError,程序继续执行后续语句。此时执行 'a + c' 引发了TypeError异常,程序捕获该异常并执行对应的except TypeError代码块。变量 'e' 代表异常的具体错误信息,因此最终输出打印出该错误详情。
示例3:结合try、except与else子句的使用
#!/usr/bin/python #coding:utf8 a = 1 b = 2 c = "1" try : assert a < b d = a + b except AssertionError,e: print ( "a<b" ) except TypeError,e: print (e) else : #当try代码块中执行没有发现任何异常的时候执行这里的语句 print ( "Program execution successful" )
上述代码执行结果为 'Program execution successful'。
示例4:结合try、except、else与finally子句(其中else子句可选)
#!/usr/bin/python #coding:utf8 #try与多个except结合用法,在try代码块中依次执行,只要捕获到异常就停止执行 a = 1 b = 2 c = "1" try : assert a < b d = a + b txt = open ( "/root/1.txt" ) txt.write( "test" ) #上面打开文件默认以r方式打开,这里会抛出IOError异常 except AssertionError,e: print ( "a<b" ) except TypeError,e: #这里的 e 为异常信息 print (e) except IOError,e: print (e) else : #当没有发现任何异常的时候执行这里的语句 print ( "Program execution successful" ) finally : #不管有没有民常都会执行finally代码块中的语句,通常用在打开文件,在文件处理过程过中出异常退出,这时候文件没有关闭 txt.close()
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









