💦 语法错误
如果错误信息是以“SyntaxError”开头,就说明python解释认为这是一个语法错误。例如👇:
print while True:
#SyntaxError: Missing parentheses in call to 'print'. Did you mean print(while True:)?
python不会完整运行带有语法错误的程序。
💦 异常
即使python程序的语法是正确的,但是在运行的时候也可能会发生一些预想之外的错误。运行时检测到的错误被称为异常,有些错误可能并不是致命的,但如果程序对大多数的异常都不做处理,python解释器会输出异常信息到屏幕上并终止程序。例如👇:
print(1 / 0) #错误
print('hello world') #不会被执行
#ZeroDivisionError: division by zero
再例如👇:
print(a * 4)
#NameError: name 'a' is not defined
python中还有很多形形色色的异常类型,可自行查阅官方文档了解。
💦 处理异常
异常是在程序运行时才会检测到的错误,有时候是不可预期的。有些错误也不是致命的,我们并不希望它们影响程序的完整运行,而python中提供了友善的方式可以让我们处理异常。例如👇:
while True:
number = int(input("请输入一个数字:"))
#请输入一个数字:1
#请输入一个数字:2
#请输入一个数字:a
#ValueError: invalid literal for int() with base 10: 'a'
运行上面的例子,当输入的是非数字内容,程序就会报错并退出。如果我们不希望因为输入了一些不符合规范的数据而使程序出错不能运行(例如用户在手机APP上输入一些内容之后APP突然异常退出,这是非常不好的体验),这时候我们就需要处理这些异常,确保程序不会无故退出。例如👇:
while True:
try:
number = int(input("请输入一个数字:"))
except ValueError:
print("您输入的恐怕不是一个有效的数字!请重试")
#请输入一个数字:1
#请输入一个数字:2
#请输入一个数字:a
#您输入的恐怕不是一个有效的数字!请重试
#请输入一个数字:
这个程序使用了两个新关键字: t r y try try和 e x c e p t except except。这两个关键字用于捕获异常并让我们运行相应的代码去处理异常。
☁️ try-except
它的语法如下👇:
try:
业务语法块
except 异常类型:
处理异常语法块
except... #可以有多个except
在 t r y try try业务语法块中,产生任何的异常都会终止业务语法块并跳转到 e x c e p t except except匹配异常类型。如果匹配得上,则运行处理异常的语法块,否则程序就报错退出。
💦 抛出异常
前面的例子都是系统抛出的异常,在python中我们也可以主动抛出异常。可使用 r a i s e raise raise语句在python中抛出一个指定的异常,例如👇:
raise Exception
它的情况就跟下面的一样。
前面的例子输出了一个没有任何内容的异常,错误信息是空的。我们也可以指定输出一个有错误内容的异常,例如👇:
raise Exception("这是错误信息")
其输出结果为:
💦 finally子句
python中的 f i n a l l y finally finally子句需要和 t r y try try子句一起使用。 f i n a l l y finally finally子句在异常处理中的作用是:无论是否有异常或者是捕获了异常, f i n a l l y finally finally都会保证执行。例如👇:
try:
print(1 / 0)
except ZeroDivisionError:
print("除零错误")
finally:
print("仍然执行")
#除零错误
#仍然执行