Python学习笔记(七) 异常处理

简介: Python学习笔记(七) 异常处理

这篇文章将会介绍 Python 中异常及其处理方法



1、基本概念


异常是一种非正常状态,它表示程序在执行过程中发生错误

在实际情况中,可能会有多种原因导致程序出现异常状态,而每种异常状态都会由一个异常对象表示

当程序出现异常状态时,会抛出一个异常对象,如果该对象未被捕获和处理,程序将会中止

在一般情况下,程序员需要考虑各种可能的异常原因,手动捕获并处理异常,以避免程序突然中止


2、异常类型


导致程序出现异常的原因有很多,以下列举一些系统内置的常见的异常对象

异常对象 描述
Exception 几乎所有异常类的基类
SyntaxError 语法错误
TypeError 将内置函数用于类型不正确的对象
ValueError 将内置函数用于类型正确但包含值不正确的对象
AttributeError 引用属性错误
NameError 引用变量错误
IndexError 使用序列中不存在的索引
KeyError 使用映射中不存在的键值

除系统内置的异常对象外,用户还可以自定义异常对象,自定义的异常对象需要继承一个异常类

class MyException(Exception):
    def __init__(self, info):
        super().__init__(self)
        self.info = info
    def __str__(self):
        return self.info
try:
    raise MyException('my exception')
except MyException as e:
    print(e)
# my exception


3、异常抛出


当语句执行发生错误时,该语句会抛出一个异常

num = 1 / 0

除了被动抛出的异常外,我们还能使用 raise 语句主动抛出一个异常

raise Exception('Error')


4、异常处理

我们可以用 try-except 捕获和处理异常,若在 try 中出现异常,则马上执行 except 中的代码

try:
    print('begin')
    string = 'hello'
    number = int(string)
    print('end')
except:
    print('exception')
# begin
# exception

我们也能在 try-except 后加上 else,在没有捕获到异常时,else 中的代码才会被执行

try:
    string = 'hello'
except:
    print('exception')
else:
    print('else')
# else

我们还能在 try-except 后加上 finally,无论是否捕获到异常,finally 中的代码都会被执行

try:
    string = 'hello'
    number = int(string)
except:
    print('exception')
finally:
    print('finally')
# exception
# finally

此外可以在 except 语句后指定异常类型,那么该 except 语句就只能捕获这种类型的异常

一个没有指定异常类型的 except 语句能捕获所有异常,但这样不能得到任何有效信息

try:
    li = list()
    li.add(123)
except AttributeError as e:
    print('AttributeError:', e)
# AttributeError: 'list' object has no attribute 'add'

另外可以同时使用多个 except 语句处理不同的异常,但是要注意它们之间的顺序

因为当前面的 except 语句捕获到异常后,将不再执行后面的 except 语句

try:
    li = list()
    li[0] = 123
except IndexError as e:
    print('IndexError:', e)
except Exception as e:
    print('Exception:', e)
# IndexError: list assignment index out of range


5、异常传播


当一个异常被抛出时,异常所在的作用域需要捕获并处理该异常

若异常在当前作用域没有得到处理,那么它将一直向上层作用域传递,直至它能够被处理

若异常一直向上传递到主程序都没有得到处理,那么程序将自动终止并显示错误信息

def faulty():
  raise Exception('Error')
def handle_exception():
    try:
        faulty()
    except:
        print('Exception Handled')
def ignore_exception():
  faulty()
handle_exception() # Exception Handled
ignore_exception() # 异常逐层传递直至主程序
# Traceback (most recent call last):
#   File "index.py", line 14, in <module>
#     ignore_exception() # Exception: Error
#   File "index.py", line 11, in ignore_exception
#     faulty()
#   File "index.py", line 2, in faulty
#     raise Exception('Error')
# Exception: Error

文章知识点与官方知识档案匹配,可进一步学习相关知识


目录
相关文章
|
4天前
|
运维 监控 API
Python进行异常处理
【6月更文挑战第14天】 ```markdown # Python异常处理与日志记录最佳实践概览 - 异常处理:确保程序稳定,改善用户体验,简化调试。 - `try-except`用于捕获异常,`except`针对具体异常类型,`else`处理无异常情况,`finally`确保资源释放。 - 日志记录:追踪执行,辅助诊断,监控分析。 - `logging`模块用于记录不同级别的日志,如`info`、`warning`、`error`。
17 6
Python进行异常处理
|
4天前
|
数据库连接 数据库 索引
Python教程:一文了解Python的异常处理知识
在编程中,异常(exception)是指在程序执行过程中出现的错误或意外情况。当发生异常时,程序会中断执行,并将控制权转移到异常处理代码,以便对异常进行捕获和处理。
24 3
|
9天前
|
BI 测试技术 索引
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-1
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
1天前
|
Python
`try-except-finally`是Python异常处理的关键字,用于优雅地处理错误
【6月更文挑战第22天】`try-except-finally`是Python异常处理的关键字,用于优雅地处理错误。示例展示了函数`divide_numbers(a, b)`尝试执行`a/b`,若出现`ZeroDivisionError`,则捕获异常并打印错误信息,最后不论是否异常,都会显示&quot;Division operation completed.&quot;。调用该函数分别展示正常除法和除零错误的处理情况。
8 2
|
1天前
|
Python
Python的异常处理通过`try-except`来实现,允许捕获和处理错误
【6月更文挑战第22天】Python的异常处理通过`try-except`来实现,允许捕获和处理错误。
17 1
|
3天前
|
定位技术 Python
Python的try、except异常处理模块使用方法
所以,我们就解决了由于可能具有的arcpy.ExecuteError异常而导致的程序中断问题;大家在实际使用时,按照自己程序中可能出现的报错类,对本文出现的arcpy.ExecuteError异常类加以修改即可。
|
5天前
|
开发者 Python
Python基础第八篇(Python异常处理,模块与包)
Python基础第八篇(Python异常处理,模块与包)
|
6天前
|
Python
GitHub爆赞!终于有大佬把《Python学习手册》学习笔记分享出来了
这份笔记的目标是为了给出一份比较精炼,但是又要浅显易懂的Python教程。《Python学习手册》中文第四版虽然比较简单,但是措辞比较罗嗦,而且一个语法点往往散落在多个章节,不方便读者总结。 我在做笔记时,将一个知识点的内容都统筹在一个章节里面,因此提炼性大大提高。而且还有《Python学习手册》中文第四版的翻译在某些章节(可能难度较大?)措辞可能前后矛盾。当知识点提炼之后就能够很快的找到一些难以理解的概念的上下文,方便吃透这些难点。
GitHub爆赞!终于有大佬把《Python学习手册》学习笔记分享出来了
这份笔记的目标是为了给出一份比较精炼,但是又要浅显易懂的Python教程。《Python学习手册》中文第四版虽然比较简单,但是措辞比较罗嗦,而且一个语法点往往散落在多个章节,不方便读者总结。 我在做笔记时,将一个知识点的内容都统筹在一个章节里面,因此提炼性大大提高。而且还有《Python学习手册》中文第四版的翻译在某些章节(可能难度较大?)措辞可能前后矛盾。当知识点提炼之后就能够很快的找到一些难以理解的概念的上下文,方便吃透这些难点。
|
17天前
|
Python
python反射 , 异常处理
python反射 , 异常处理