1. 异常处理
在编写程序时,我们经常会遇到各种意料之外的异常情况,例如输入了错误的数据类型、操作了不存在的变量等。这时,程序会崩溃,并输出相应的错误提示信息。为了避免程序崩溃,我们需要使用异常处理机制来捕获这些异常,并进行相应的处理。
1.1 try-except语句
Python中的异常处理机制主要是通过try-except
语句来实现的。其中try
代码块中是需要进行异常处理的代码,except
代码块中是针对不同异常情况的处理方式。当try
代码块中出现异常时,程序就会跳转到except
代码块中执行。
以下是一个简单的示例,当输入非整数时,程序会捕获ValueError
异常并输出提示信息:
try:
x = int(input("请输入一个整数:"))
except ValueError:
print("输入的数据不合法!")
1.2 嵌套的try-except语句
在程序中可能存在多个可能引发异常的代码块,为了针对不同的异常情况进行不同的处理,我们可以使用嵌套的try-except
语句,如下所示:
try:
try:
x = int(input("请输入一个整数:"))
y = int(input("请输入另一个整数:"))
result = x / y
except ValueError:
print("输入的数据不合法!")
except ZeroDivisionError:
print("除数不能是0!")
except:
print("出现异常!")
上述代码中,当输入的数据类型不是整数时,程序会跳转到内层的ValueError
异常处理块中执行;当输入的除数为0时,程序会跳转到内层的ZeroDivisionError
异常处理块中执行。而当程序出现了其他异常时,则会跳转到外层的except
代码块中执行。
2. 反射机制
Python还提供了一种反射机制,可以通过字符串的方式调用函数、获取变量值等操作。反射机制主要是通过内置函数getattr()
、setattr()
、delattr()
来实现的。
2.1 使用getattr()获取变量值
通过getattr()
函数可以获取对象中指定名称的属性或方法。下面的示例演示了如何通过字符串的方式获取一个变量的值:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("Tom", 20)
name = getattr(p, "name")
print(name)
上述代码中,我们定义了一个Person
类,并创建了一个实例对象p
。使用getattr()
函数获取p
对象中的name
属性,并将其赋值给变量name
。最后,输出name
的值。
2.2 使用setattr()设置变量值
通过setattr()
函数可以设置对象中指定名称的属性或方法。下面的示例演示了如何通过字符串的方式设置一个变量的值:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("Tom", 20)
setattr(p, "name", "Jack")
print(p.name)
上述代码中,我们定义了一个Person
类,并创建了一个实例对象p
。使用setattr()
函数将p
对象中的name
属性设置为"Jack"
。最后,输出p.name
的值。
2.3 使用delattr()删除变量
通过delattr()
函数可以删除对象中指定名称的属性或方法。下面的示例演示了如何通过字符串的方式删除一个变量:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("Tom", 20)
delattr(p, "age")
print(p.age)
上述代码中,我们定义了一个Person
类,并创建了一个实例对象p
。使用delattr()
函数删除p
对象中的age
属性。由于age
属性不存在了,所以执行print(p.age)
时会报AttributeError
错误。