1.什么是异常以及如何处理异常?
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
在执行脚本的时候,会经常遇到比较典型的异常,例如NameError,TypeError,ZeroDivisionError等。在python中,我们用try,except,else,finally来处理异常,我们通过举例说明是如何处理异常:
print('正常打印')
try:
print(a) #变量a没有被定义,程序在执行时会在此处报错
print('westos')
except:
print('代码运行错误')
else:
print('运行成功')
finally:
print('执行finally')
print('打印结束')
运行结果:我们可以看到运行了except下面的语句和finally下面的语句
现在我们让try后面的语句不出错,尝试运行结果
print('正常打印')
try:
print('a') #此处不再报错,直接打印a和westos
print('westos')
except:
print('代码运行错误')
else:
print('运行成功')
finally:
print('执行finally')
print('打印结束')
运行结果:可以看到程序运行了try,else,finally后面的语句
总结:
由上面的代码运行可以看出,当try后面的语句有错的时候,就会执行except后面的语句,当try后面的语句没有出错,则不会执行except后面的语句,而执行else的语句。finally后面的语句不论什么情况总会被执行。
2.触发异常
python提供raise语句自己触发异常, raise语法格式如下:
raise [Exception [, args [, traceback]]]
语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,
args 是自已提供的异常参数。
python的异常有个大基类。然后继承的是Exception。所以我们自定义类也必须继承Exception。
#此处我们定义一个NameError的错误
class AgeError(NameError):
pass
name = input("姓名:")
if len(name) < 2:
raise NameError("姓名必须大于2位")
age = int(input("年龄:"))
if age < 0 or age >= 150:
raise NameError("年龄必须在0<age<150")
运行结果:可以看到程序自行抛出异常