Python处理异常的方法:ZeroDivisionError、ValueError、FileNotFoundError异常

一、什么是异常、为什么要处理异常
Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。

二、如何处理异常
异常是使用try-except 代码块处理的。try-except 代码块让Python执行指定的操作,同时告诉Python发生异常时怎么办。使用了try-except 代码块时,即便出现异常, 程序也将继续运行。

三、处理ZeroDivisionError、ValueError异常
例:输入两个数a、b,输出a/b。

print("give me two num annd i will divide them")
print("enter 'q' to quit")
while True:
    first_num=input("please input first num:")
    if first_num == 'q':
        break
    second_num=input("please input second num:")
    if second_num=='q':
        break
    answer = int(first_num) / int(second_num)
    print(answer)      

1、当second_num输入为0时,将出现ZeroDivisionError异常:

Traceback (most recent call last):
  File "D:/pycharm/WorksPlace/Python:from learn to practice/file.py", line 52, in <module>
    answer = int(first_num) / int(second_num)
ZeroDivisionError: division by zero

使用try-except解决该问题:

print("give me two num annd i will divide them")
print("enter 'q' to quit")
while True:
    first_num=input("please input first num:")
    if first_num == 'q':
        break
    second_num=input("please input second num:")
    if second_num=='q':
        break
    try:
         answer=int(first_num)/int(second_num)
    except ZeroDivisionError:  #second_num输入为0引起的异常
         print("You can't divide by zero! \n please input again:")
    else:
    	print(answer)       #输入无异常,输出answer

运行结果:在我们输入second_num为0后,程序并没有崩溃,而是按照except ZeroDivisionError的处理方式处理,并且程序依然能够运行。

在这里插入图片描述
except ZeroDivisionError处理流程:
我们将导致错误的代码行answer=int(first_num)/int(second_num)放在了一个try 代码块中。如果try 代码块中的代码运行起来没有问题,Python将跳过except 代码块;如果try 代码块中的代码导致了 错误,Python将查找这样的except 代码块,并运行其中的代码,即其中指定的错误与引发的错误相同。

2、当first_num没有输入时,将出现ValueErro异常:
当没有输入first_num,只输入second_num时,会出现ValueErro异常,因为代码中我们将输入的字符型数字转换成int型数字,当没有输入时,将无法进行转换,从而出现异常。
在这里插入图片描述
同样适用try 代码:

print("give me two num annd i will divide them")
print("enter 'q' to quit")
while True:
    first_num=input("please input first num:")
    if first_num == 'q':
        break
    second_num=input("please input second num:")
    if second_num=='q':
        break
    try:
        answer=int(first_num)/int(second_num)
    except ZeroDivisionError:  #second_num输入为0引起的异常
        print("You can't divide by zero! \n please input again:")
    except ValueError:      #first_num没有输入引起的异常
        print("please input right first_num")
    else:
        print(answer)       #输入无异常,输出answer

运行结果:

在这里插入图片描述四、处理FileNotFoundError异常
使用文件时,一种常见的问题是找不到文件:你要查找的文件可能在其他地方、文件名可能不正确或者这个文件根本就不存在。对于所有这些情形,都可使用try-except 代码 块以直观的方式进行处理。

在下面的代码中,试图打开不存在的文件 offer.txt,那么将输出:"file is not exsit"

filename='offer.txt'
try:
    with open(filename) as files:    # 打开文件
        contents = files.read()         # 将文件内容储存到contents中
except FileNotFoundError:               # 出现“找不到文件”异常
    print("file is not exist")          # 提示出现异常原因
else:
    print(contents)                     # 输出文件内容

总结:
当某行代码可能出现错误时,将其放在try语句中,并根据不同的异常使用一个或多个except语句,这样就能解决异常引起程序崩溃的问题。


版权声明:本文为qq_43516928原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。