零基础学习python_异常处理(32-33课)

  我们写完python执行的时候是不是经常会遇到报错,而且报错都是大片红字,这样给别人的感受就是你写的程序怎么老是出问题啊,这样我们还咋么混下去呢?于是乎,就有了异常处理的东东。

  python的try语句有两种风格---一种是处理异常(try/except/else),一种是无论是否发生异常都将执行最后的代码(try/finally)。

第一种处理异常如下:
try:
<语句>        #运行代码
except <异常的名字>:
<语句>         #哪个异常符合执行哪个
except <异常的名字> as <报错的信息>:
<语句>        #报错信息可以以变量形式打印
else:
<语句>       #没有异常时执行

第二种处理异常如下:

try:

<语句>
except <异常的名字>:
<语句>       
finally:
<语句>   #退出时总是执行
 
举两个实例看下:
第一个实例:
try:
    open("test.txt",'r')   #打开一个不存在的文件
except IOError:    #捕捉这个异常
    pass       #表示实现了相应的实现,但什么也不做。

第二个例子:

try语句子句形式表如下
except:            捕获所有异常
except name:        只捕获特定的异常
except name as value:    捕获异常和它的附加数据
except (name1,name2):    捕获任何列出的异常
else:            如果没有异常
finally:        总是执行
 
 

常见异常:

Exception                        所有异常的基类

AttributeError                 特性应用或赋值失败时引发

IOError                             试图打开不存在的文件时引发

IndexError                       在使用序列中不存在的索引时引发

KeyError                          在使用映射不存在的键时引发

NameError                       在找不到名字(变量)时引发

SyntaxError                     在代码为错误形式时引发

TypeError                         在内建操作或者函数应用于错误类型的对象是引发

ValueError                       在内建操作或者函数应用于正确类型的对象,但是该对象使用不合适的值时引发

ZeroDivisionError          在除法或者摸除操作的第二个参数为0时引发

还有一个就是主动触发异常(raise)。

raise语法格式如下:

raise [Exception [, args [, traceback]]]

语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是"None"。

最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。

格式如下:

try:
    raise TypeError('类型错误')
except Exception as e:
    print(e)

举个例子:
try:
    for i in range(3):
        for i in range(3):
            if i == 2:
                raise KeyboardInterrupt
            print(i,j)
except KeyboardInterrupt:
    print('退出!')

学了以上的知识点后,我们可以来看下底下这个例子:

try:
    f = open('test1.txt','r')    #提示:打开不存在文件就出错了,此时还未打开文件,因此根本就没有f这个变量
    f.read()
except IOError as e:
    print('错误:',e)
except SyntaxError:
    pass
except NameError as msg:
    print('错误:'+str(msg))
except:
    print('对的,都是你的错')
else:
    print('读取成功')
finally:
    f.close()     #无论咋样都要关闭文件

看完之后你们觉得这个会有什么问题呢?

最后在文件关闭的时候会报错如下:

那我们怎么规避呢?思考下吧~~~~

答案如下:

try:
    f = open('test1.txt','r')   
    f.read()
except IOError as e:
    print('错误:',e)
except SyntaxError:
    pass
except NameError as msg:
    print('错误:'+str(msg))
except:
    print('对的,都是你的错')
else:
    print('读取成功')
finally:
    if 'f' in locals():             #如果文件对象变量存在当前局部变量符号表的话就说明打开成功了
        f.close()

简单吧,嘻嘻^-^

原文地址:https://www.cnblogs.com/leixiaobai/p/7777583.html