zoukankan      html  css  js  c++  java
  • 从0开始的Python学习016异常

    简介


    当你的程序不能正常运行的时候,Python会在控制台打印一段提醒,告诉你一个错误,这个错误就是异常。

    错误


    我在控制台写了一段无效的代码,将print()的括号去掉,在执行这条语句的时候,系统提示语法错误,无效的语句(我百度翻译的)。这就是错误处理器所作的工作。

    再换一种方式写错误:

    在程序获取用户输入的时候,我们使用CTRL+d引发了一个EOFError错误,接下来我们尝试去处理这样的错误。

    处理异常


    使用try---except语句来处理异常。我们通常把容易产生异常的语句放置在try块中,把做异常处理的语句放在except块中。

    import sys
    
    try:
        a = input('Enter something:')
    except(EOFError):
        print('
    Why did you do an  EOF on me ?')
        sys.exit()
    except:
        print('
    Some error/exception occurred.')
    
    print('Done')

    运行结果

    我们把所有可能引发错误的语句放在try块中,然后在except从句/块中处理所有的错误和异常。except从句可以专门处理单一的错误或异常,或者一组包括在圆括号内的错误/异常。如果没有给出错误或异常的名称,它会处理 所有的 错误和异常。对于每个try从句,至少都有一个相关联的except从句。

    你还可以让try..catch块关联上一个else从句。当没有异常发生的时候,else从句将被执行。

    import sys
    
    try:
        a = input('Enter something:')
    except(EOFError):
        print('
    Why did you do an  EOF on me ?')
        sys.exit()
    except:
        print('
    Some error/exception occurred.')
    else:
        print('no error')
    
    print('Done')

    运行结果

     raise引发异常


    你可以使用raise语句抛出异常。你需要指明错误/异常的名称和伴随异常触发的异常对象。这个异常应该是Error和Exception类的子类。这就用到了继承的思想,使用__init__方法初始一些方法和参数。

    class ShortInputException(Exception):
        def __init__(self,length,atleast):
            Exception.__init__(self)
            self.length = length
            self.atleast = atleast
    
    try:
        s = input('Enter something-->')
        print(len(s))
        if len(s) < 3:
            raise ShortInputException(len(s),atleast = 3)
    except(EOFError):
        print('
    Why did you do an EOF on me ?')
    except(ShortInputException) as x:
        print('ShortInputException: The in input was of length %d,
                was expecting at least %d' % (x.length,x.atleast))
    else:
        print('No exception was raised.')

    运行结果

    try...finally


    假如在你读文件的时候发生了异常,但是无论如何文件都要关闭。这个时候该怎么做呢?

    这里我们需要使用finally块来完成。

    在使用try捕获异常的时候,我们可以同时使用except块和finally块。

    import time
    
    try:
        f = open('poem.txt')
        while True: # our usual file-reading idiom
            line = f.readline()
            if len(line) == 0:
                break
            time.sleep(2)
            print(line)
    finally:
        f.close()
        print('Cleaning up...closed the file') 

    运行结果

    这里使用了time的sleep函数,里面的参数是它的运行间隔。

    这样我们就有时间去使用CTRL+c使程序发生异常。这时候我们发现finally块中的语句还是运行的,文件正常关闭了。

  • 相关阅读:
    [软件安装]MYSQL
    [软件安装]JDK
    maven仓库错误
    java.util.Optional
    【原创】Elasticsearch无宕机迁移节点
    【原创】MapReduce备份Elasticsearch数据到HDFS(JAVA)
    python3项目打包成exe可执行程序
    python的frame切换
    switch_to_frame() switch_to.frame()
    如何快速查找透明的icon,让你再也不缺icon的方法
  • 原文地址:https://www.cnblogs.com/liuhappy/p/10668515.html
Copyright © 2011-2022 走看看