异常判断与实例

以下通过案例来加深大家对异常的认知。上面一讲里面,给它讲的是这样的案例,我们觉得很粗糙,不够人性化,这个除数和被除数,应该让用户能够在键盘上输入,而不是固定的,因此呢,对它进行加工。让用户输入x和y,然后计算x/y。

然后再运行一下,出入你要的x和y,然后打印结果。

如果运行2除以0,就会提示错误:被除数为零。通过这样一个简单的案例,让大家对日常的异常了解一下,接下来看,可疑代码块。对于输入,如果输入第二个数的时候,我输入的不是0,也不是数字,会发生什么情况呢?

类型错误,这个时候程序直接报错退出了,那么,为什么except ZeroDivisionError能够捕获除以0的异常,却没有捕获类型转换的异常呢?这时候能不能把多个异常类放在一个except中呢?当然可以了。看看如何放的!

逗号分隔开不同的异常类型,这个除数不合法,这个时候,再次输入2、和a,结果如下:

可以看到,已经不再像前面一样程序报错终止了,而是打印了一个提示语。

这个时候,也许还有其他异常,这个异常情况可能变得不全了!有没有办法捕获全部异常呢?但是这种情况,不推荐,为什么不推荐呢?因为你不知道具体是什么原因引起的异常,不推荐在实际情况中使用。如下,捕获全部异常:

那如果,我希望打印全部的异常堆栈呢,这个时候就需要我们对异常进行一个命名了。如下,将ZeroDivisionError通过as关键字命名为e,然后就可以通过print将e打印出来,看看具体的错误:

对于多个异常,当不在关系其他异常的时候,可以通过else来统一处理,else示例如下:

else就类似一个判断语句,如果前面的except都无法匹配,那么就执行else语句。

IT赶路人

专注IT知识分享