Python 培训(通用)异常处理

说明

  • 异常处理可以让程序更加健壮,尤其是大型项目,拥有完善异常处理的项目可以很快检查出程序的 bug

包含尽可能多知识点的例子

  • 由于异常处理有一些繁杂,看例子最为有效,我就整合了一下包含尽可能多的例子的程序,如下所示:
try:
	x = int(input('Enter the first number: '))
	y = int(input('Enter the second number: '))
	print(x/y)
except ZeroDivisionError:
	raise ValueError
except (TypeError, NameError) as e:
	print(e)
except:
	raise
  • 如上述语法,except 后面跟着的就是内置的异常类,捕捉错误的类型,内置异常类含义如下:
类名 描述
Exception 所有异常类的基类
AttributeError 引用属性或赋值失败
OSError 操作系统不能执行
IndexError 使用序列中不存在的索引
KeyError 使用字典中不存在的键
NameError 找不到变量名称
SyntaxError 代码不正确
TypeError 将内置操作或函数用于类型不正确的对象
ValueError 将内置操作或函数用于类型正确但值不合适的对象时引发
ZeroDivisionError 除法或求模运算的第二个参数为0时引发
  • 显然,知道错误类型以后,就可以分类处理这些异常了,也可以用()同时处理多个异常
  • 最后一个 except 会处理前面没有处理过的异常
  • 上述的 raise 语句,是引发异常,带参数就是引发指定的异常,不带参数就是引发默认的异常。
  • 所谓引发异常,就是在函数嵌套的时候,向上引发异常,如果一直没有处理这个异常,就会终止程序并报错。

两个子句

  • 除了 try、except 以外,还有两个子句:else、finally。其中 else 语句块在没有异常时执行,finally 语句块在有异常后执行。
  • 拿 else 举个例子,如下:
while True:
	try:
		x = int(input('Enter the first number: '))
		y = int(input('Enter the second number: '))
		print(x/y)
	except:
		print('Invalid input')
	else:
		break
  • 显然,只有当成功一次了以后才会结束,否则一直会输入。

本文章使用limfx的vsocde插件快速发布