zoukankan      html  css  js  c++  java
  • 零基础学习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()

    简单吧,嘻嘻^-^

  • 相关阅读:
    XSS练习小游戏和答案参考
    nxlog以syslog方式发送日志
    Hydra—密码爆破神器
    syslog服务器配置笔记
    信息安全工具汇总整理
    nmap使用指南
    Cleaner, more elegant, and harder to recognize (msdn blog)
    Golang 中的坑 一
    Concurrency Is Not Parallelism (Rob pike)
    golang sql database drivers
  • 原文地址:https://www.cnblogs.com/leixiaobai/p/7777583.html
Copyright © 2011-2022 走看看