定义:异常是程序在执行过程中发生的错误事件,它会中断程序的正常执行。如果没有适当处理异常,程序将会终止并输出错误信息。异常可以是由语法错误、代码逻辑错误、外部环境变化等导致的
既然编辑器会在程序编写或执行发生错误时返回相应的提示信息给开发者,那么为什么还要自己编写异常处理语句呢?
回答: 当python检测到一个错误时,解释器就无法继续运行了,会自动中断执行程序。有时候我们希望避免程序终止,提高程序的容错性和可靠性
目的:当出现异常时,程序会停止执行并抛出一个异常对象,如果没有适当的处理机制,程序将会终止运行。为了避免直接停止程序,提高程序的容错性和可靠性,我们通常会使用try语句来处理异常。
目的 | 作用 |
---|---|
提高程序的健壮性 | 异常处理能够防止程序因为错误或异常情况而崩溃,提高程序的稳定性和可靠性 |
更好的错误信息提示 |
通过捕获和处理异常,程序可以更清晰地指示出问题所在,帮助开发者更快速地定位和修复bug |
资源管理 |
在处理异常的过程中,可以确保资源的正确释放,避免资源泄漏和内存泄漏问题 |
提高用户体验 |
当程序能够正确处理异常情况时,可以提供更好的用户体验,比如友好的错误提示信息和安全机制 |
这种错误在代码编写阶段就能被检测到,指的是程序编写过程中违反了编程语言的语法规则,导致代码无法被正确解析和执行。常见的语法错误包括拼写错误、缩进错误、语法结构错误等。当程序中出现语法错误时,编译器或解释器会报错并指出错误的位置,需要程序员进行修正才能使程序顺利运行。
例如:忘记在if
语句后面加冒号
逻辑错误是指程序在语法上没有错误,但实际逻辑却不符合预期导致程序运行出现问题。逻辑错误通常需要通过调试和逻辑分析来找出问题的根源,并进行相应的修正。这类错误在代码运行时不会引发异常,但导致程序的行为与预期不符。逻辑错误通常是由于程序员的错误理解或错误的实现导致的。例如,算法错误、变量赋值错误、条件判断错误等
常见的异常种类
- SyntaxError:语法错误,代码不符合Python语法规定
- IndentationError:缩进错误
- NameError:名称错误,即使用了未定义的变量名或函数名
- TypeError:类型错误,即对一个不支持该操作的数据类型进行操作
- ValueError:数值错误,即传入的参数值不符合预期
- KeyError:字典中查找了一个不存在的键
- IndexError:列表或其他序列类型中下标越界,索引/下标超过范围
- FileNotFoundError:文件未找到错误
- IOError:输入输出操作错误,基本上是打开文件失败(比如文件不存在)
- ZeroDivisionError:除零错误,除数为零
- AttributeError:对象没有这个属性
- ImportError:引入模块或包错误,基本上是路径或名称错误
try
块中的代码是可能会引发异常的部分,except
块中的代码是在捕获到特定异常后执行的部分。
补充:
else:else
块可以与try
和except
一起使用,用于在没有引发异常时执行的代码。
finally:finally
块可以与try
和except
一起使用,块中的代码无论是否发生异常都会执行,通常用于清理工作,如关闭文件或释放资源。
语法:
try:
执行代码
except [异常类型]:
返回提示信息
else:
没有异常时执行的代码
try:
x = 10 / 2 #可能引发异常的代码
except ZeroDivisionError:
print("除零错误!") #处理异常的代码
else:
print("计算成功,结果为:", x) #未出现异常时执行的代码
finally:
print("无论如何都会执行的代码") #始终执行的代码
def divide(num1,num2):
try:
return num1/num2
except ZeroDivisionError: #针对特定错误类型
return '除数不能为0'
except TypeError: #针对特定错误类型
return '输入数据类型不正确'
except (ZeroDivisionError,TypeError): #捕获多个异常
return '输入除数不能为0,也不能输入非数字的数据!'
except: #只要异常都返回
return '输出数据不正确'
print(divide(4,2))
print("运算结束")
try
块中捕获多个异常,通过在多个except
块中指定不同的异常类型来实现。try
块中捕获多个异常,通过在一个except
块中使用元组同时匹配多个异常Exception
来捕获所有异常,但这是一种不推荐的做法,除非在特定情况下确实需要捕获所有可能的异常。try:
x = 1 / 0
except Exception as e:
print("发生异常:", e)
Exception
类,这种方法称为raise抛出异常class MyCustomError(Exception):
pass
try:
raise MyCustomError("这是一个自定义异常")
except MyCustomError as e:
print("捕获自定义异常:", e)
raise是由程序员,自定义规则来抛出异常
语法:
# 1、使用Exception创建异常对象
e = Exception('自定义异常')
# 2、使用raise抛出异常
raise e
class ShortInputException(Exception):
'''自定义的异常类'''
def __init__(self, length, atleast):
#super().__init__()
self.length = length
self.atleast = atleast
def main():
try:
s = input('请输入 --> ')
if len(s) < 3:
# raise引发一个你定义的异常
raise ShortInputException(len(s), 3)
except ShortInputException as result:#x这个变量被绑定到了错误的实例
print('ShortInputException: 输入的长度是 %d,长度至少应是 %d'% (result.length, result.atleast))
else:
print('没有异常发生.')
学习参考:Python异常处理:异常的捕获和处理(try, except, finally)①_第1关:学习-python异常处理之try…except…finally…-CSDN博客
【python】异常处理_python异常处理-CSDN博客
Python异常处理(基础详解)_如何有趣的讲解python异常-CSDN博客