1. Python异常处理
Python中的异常是程序运行时可能发生的意外事件,如除0错误、文件不存在等。当这种错误发生时,程序会抛出异常并出现错误提示信息,这通常称为“抛出”或“引发”异常。
1.1 异常处理语法
在Python中,可以使用try-except语句来处理异常。语法如下:
try:
#尝试执行的代码
except ErrorType1:
#处理ErrorType1类型异常的代码
except ErrorType2:
#处理ErrorType2类型异常的代码
else:
#没有发生异常时执行的代码
finally:
#无论是否发生异常都会执行的代码
其中,try块包含要尝试执行的代码。如果try块执行时引发了一个异常,那么异常会被捕获并由相应的except块处理。如果没有异常发生,那么else块中的代码将被执行。最后,finally块包含的代码将无论是否有异常都会执行。
1.2 内置异常类型
Python有许多内置的异常类型,例如:
ValueError:当一个函数或操作接收到的参数类型正确但对其余因素存在问题时引发(例如,在查找列表中不存在的元素时)。
TypeError:当操作或函数应用于错误类型的对象时发生(例如,尝试对数字和字符串进行加法运算)。
IndexError:当函数或操作试图访问超出列表范围的元素时引发。
KeyError:当字典使用不存在的键访问元素时发生。
1.3 示例
下面是一个示例程序,测试了除以0、输入非数字字符和索引越界的情况,并使用try-except语句处理异常:
def divide(x, y):
try:
result = x / y
except ZeroDivisionError:
print("除数不能为0")
except TypeError:
print("输入类型错误")
else:
print("结果为:", result)
finally:
print("执行完毕")
divide(2, 'a')
divide(3, 0)
divide([1, 2], 3)
输出结果如下:
输入类型错误
执行完毕
除数不能为0
执行完毕
输入类型错误
执行完毕
2. 自定义异常
除了Python内置的异常类型,我们还可以定义自己的异常类型,以便在特定情况下引发异常。自定义异常可以提高代码的可读性和可维护性,避免过于复杂的条件判断和错误处理。
2.1 自定义异常类
自定义异常类是一种新的类,继承自异常类,通常包含一个或多个与该异常类相关的属性和方法。定义一个自定义异常类的基本语法是:
class CustomError(Exception):
def __init__(self, message):
#初始化父类的构造函数
super().__init__(message)
#自定义异常类的属性
self.error_code = 1001
上述代码定义了一个名为CustomError的自定义异常类,继承自Exception类,具有一个message属性和一个error_code属性。
2.2 引发自定义异常
要引发自定义异常,只需要实例化该异常并抛出即可,例如:
raise CustomError("自定义异常:出现错误")
2.3 示例
下面是一个示例程序,演示如何定义和引发自定义异常:
class LoginError(Exception):
def __init__(self, message):
super().__init__(message)
self.error_code = 1001
class User:
def __init__(self, name, password):
self.name = name
self.password = password
def login(self):
if self.password != '123456':
raise LoginError("密码错误")
else:
print("登录成功")
user1 = User('张三', '12345')
user2 = User('李四', '123456')
try:
user1.login()
user2.login()
except LoginError as e:
print(e.message)
print(e.error_code)
输出结果如下:
密码错误
1001
3. 断言原理与用法
断言是一种用于检查和调试程序的技术,通过在代码中插入一些检查语句来发现和修复程序错误。在Python中,assert语句用于断言,其语法如下:
assert condition, message
其中,condition是一个条件表达式,如果条件为false,则断言失败,引发AssertionError异常,并抛出message作为异常信息。如果条件为true,则断言成功,程序将继续执行。
3.1 示例
下面是一个使用assert语句进行断言的示例程序:
temperature = 0.6
assert 0 <= temperature <= 1, "温度超出范围"
print("温度为:", temperature)
运行结果如下:
温度为: 0.6
3.2 断言的优点和注意事项
断言的优点是可以提高程序的可维护性和可读性,同时可以在程序开发过程中帮助我们发现潜在的错误。在调试和开发阶段,断言可以帮助我们更快地发现和排除错误。
但同时需要注意,断言不应该被用于处理输入错误或避免错误发生。断言只是用于程序调试和自我检查,应该始终在开发期间启用。在发布和生产环境中,需要将断言禁用以提高程序的运行速度和安全性。