??????? 异常处理是编程中非常重要的一个概念,它涉及到对程序运行中出现的错误和意外情况的管理。在 Python 中,异常是使用 try...except 语句处理的。
????????在编程中,异常是程序运行过程中发生的事件,它会打断正常的指令流。这些意外情况可能由各种原因引起,包括文件不存在、网络连接失败、用户输入无效数据或代码中的逻辑错误等。若不妥善处理,异常可能导致程序突然崩溃或产生不可预期的行为。因此,异常处理成为了确保程序稳定性和用户体验的关键。
Python 通过内置的异常处理机制来处理运行时错误,主要涉及以下关键字:try
, except
, else
, finally
。
try
和 except
块是异常处理的核心:
s = "Hello"
try:
# 这句代码会发生异常
print(s.index('O'))
except Exception:
print("查找的子查不存在")
# 使用Try来尝试执行后面语句块中的代码,如果代码发生异常问题
# 那么异常信息就会被expect捕捉到。可以在except后面进行异常处理
# 如果代码没有异常,那么程序就正常运行,不会执行except后面的代码
print('over')
上述例子中,尝试在hello自负床中共查找零,这显然会引发一个ValueError异常,因为不存在。异常发生时,程序控制权会转移到 except
块,而不是崩溃。
except
块来捕获不同的异常:try:
# 尝试执行的代码
except ZeroDivisionError:
# 处理除以0的异常
except (TypeError, ValueError):
# 处理类型错误或值错误的异常
except Exception as e:
# 捕获其他所有异常
print(f"发生了一个未知错误: {e}")
else
块允许在没有异常的情况下执行代码,而 finally
块用于执行清理操作,无论是否发生了异常:
try:
f = None
f = open('a.txt','r')
except Exception as e:
print('出现异常时执行except语句块')
print("要打开的文件不存在!")
print(e)
else:
# 对文件读操作
print('当程序没有出现异常时,执行else语句块')
print(f.read())
finally:
# 不管程序是否出现异常,都会执行finally这个语句块
# 一般这个模块中,主要写的内容是资料关闭或回收
# 比如,文件的关闭,网络连结的关闭,数据库的关闭
print('无论是否出现异常,都会执行finally语句块')
if f != None:
f.close()
print('文件关闭成功!')
p_16自定义异常.py文件
# 定义一个用来判断当前手机号是否有非法字符的异常
class PhoneNumberNotDigitError(Exception):
pass
# 定义一个手机号位数是否合法的异常
class PhoneNumberLengthError(Exception):
def __init__(self,msg):
self.__msg = msg
def __str__(self):
return self.__msg
# 定义一个函数,用来获取电话号
def get_phone_number():
pn = input('请输入一个11位的手机号:')
if pn.isdigit() == False:
# 抛出自定义异常
raise PhoneNumberNotDigitError
elif len(pn) != 11:
raise PhoneNumberLengthError('手机号位数不正确')
print('输入的手机号是合法的:',pn)
return '输入的手机号是合法的:' + pn
处理自定义异常.py文件
from p_16自定义异常 import *
try:
num = get_phone_number()
except (PhoneNumberLengthError,PhoneNumberNotDigitError) as e:
print(e)
else:
print(num)
异常处理虽然强大,但也不应该滥用。一个良好的编程习惯是仅在预见到可能出现问题的地方使用异常处理,而不是将整个代码块放入 try
-except
结构中。过度使用异常处理可能会掩盖代码中的真正问题,从而使得调试变得困难。
合理地使用异常处理可以大幅提升程序的可靠性和用户体验。通过预见并妥善处理可能出现的错误情况,我们可以制作出更加健壮的 Python 应用程序。记住,适度地使用异常处理,并在可能的情况下采取预防措施,比如用户输入验证,总是比依赖异常处理来解决问题更为明智。