在Python中导致程序无法运行的有2种情况。

1;语法错误,这是致命错误,需要重新查看代码进行修改,比如:缩进问题,比如关键字错误。

2;程序异常,这不是致命错误,我们可以捕获它。

在Python中处理异常是用try - except代码代码块来处理的。

学习这章的目的是:告诉Python发生异常时怎么办。使用try-except代码块后,即便出现异常,程序也将继续运行:我们可以编写的友好的错误消息,而不是令用户迷惑的traceback。

举个例子:

python 处理异常的方法(Python自学从入门到实践)(1)

zeroDivisionError: integer division or modulo by zero

大概意思是说;除数不能为0.

如何通过try - except,捕获这个异常,并且不会出现程序异常呢?

def ceshi(a,b): return a//b b=int(input('请输入一个除数:')) a=int(input('请输入一个被除数:')) try: print(ceshi(a,b)) except ZeroDivisionError: print('除数不能为0')

python 处理异常的方法(Python自学从入门到实践)(2)

这样来看,就算除数输入0,也不会出现异常,不过还有一个问题,就是程序结束了,应该要让用户知道不能输入0之后,能输入其他数才对。加入一个while循环 和 退出条件完善一下:

def ceshi(a,b): return a//b while True: b = input('请输入一个除数:') if b =='退出': break else: a = int(input('请输入一个被除数:')) b = int(b) try: print(ceshi(a,b)) except ZeroDivisionError: print('除数不能为0')

现在需要思考另外一个问题了,就是except 后面到底应该跟什么内容呢?我发现后面可以跟很多内容,都是大写字母开头的,我们可能需要记得少部分,但不需要全部去记忆,可以当发生异常的时候,把异常的第一段加入进去 即可。再看一个例子:

我想读取一个不存在的文件,Python抛出了异常:FileNotFoundError。现在我可以利用这个异常,捕获它,然后提醒用户;

python 处理异常的方法(Python自学从入门到实践)(3)

FileNotFoundError。现在我可以利用这个异常,捕获它,然后提醒用户;

dizhi ="/Users/xuxizhi/Desktop/Python523.txt" try: with open(dizhi,'r',encoding='utf-8')as a: a.write('我想用只读的方式打开这个文件,但现在这个文件不存在,应该会出现异常') except FileNotFoundError: print(f"提醒~提醒~{dizhi}不存在,无法读取")

python 处理异常的方法(Python自学从入门到实践)(4)

那是不是任何的异常都可以捕获呢?我们多试试。

python 处理异常的方法(Python自学从入门到实践)(5)

异常的开头是:ValueError 我们来试试捕获它。

python 处理异常的方法(Python自学从入门到实践)(6)

在实际运用中,客户的输入总是会出现奇怪的情况,为了让程序正常运行,我们需要捕获异常,并且告知客户应该怎么输入才正确,这样可以给到客户良好的体验。

来看下面的案例,比较两个数的大小:1;要求客户输入的是数值,2;并且限定了输入数值的范围(这仅仅是我做试验用的方法)

def ceshi(a, b): if a > b: return f"{a}比{b}大" else: return f"{a}比{b}小" while True: try: a = int(input('请输入数值a:')) except ValueError: print('只能输入数值哈 输入其他都没有用') else: if a > 10: print('填入的数值不能大于10') continue else: print('输入正确') break while True: try: b = int(input('请输入数值b:')) except ValueError: print('只能输入数值哈 输入其他都没有用') else: if b > 10: print('填入的数值不能大于10') continue else: print('输入正确') break print(ceshi(a, b))

python 处理异常的方法(Python自学从入门到实践)(7)

我们需要学会这种方法,其目的是让程序能够正常运行并给客户良好的体验,同时也加深我们对可能发生的所有情况都计算在内。

,