zoukankan      html  css  js  c++  java
  • Python基础--异常

    异常

    当Python程序执行时遭遇到错误,解释器将无法继续往下执行,此时会出现错误提示,这便是异常。

    • 例如打开一个不存在的文件 

           

    • 使用一个没有定义的变量

           

    捕获异常

    • try-except

      将可能出现问题的代码,放在try中,把处理异常的代码放在except中。

    try:
        open("www.txt",'r')
    except FileNotFoundError:
        print("--------处理异常-------")
        print("您打开的文件不存在")
    
    输出:
        --------处理异常-------
        您打开的文件不存在

      当我们需要捕获多个异常时,可以将要捕获异常的名字放在一个元组中。except之后使用Exception将捕获所有异常,有时我们希望存储捕获的异常可以使用as。

    try:
        open("www.txt",'r')
        print(num)
    except (FileNotFoundError,NameError) as exceptionInfo:
        print("--------处理异常-------")
        print("您打开的文件不存在")
        print("异常的基本信息:",exceptionInfo)
    
    输出:
        --------处理异常-------
        您打开的文件不存在
        异常的基本信息: [Errno 2] No such file or directory: 'www.txt'
    • else

      在if中条件不满足时就会执行,for循环中不满足条件时就会执行。类似在try-except中如果没有异常将被执行else中的逻辑代码。

    try:
        open("test.py",'r')
        num = 100
        print(num)
    except (FileNotFoundError,NameError) as exceptionInfo:
        print("--------处理异常-------")
        print("您打开的文件不存在")
        print("异常的基本信息:",exceptionInfo)
    else:
        print("没有异常产生,可以完美使用")
    
    输出:
        100
        没有异常产生,可以完美使用
    •  try-finally

      如果使用try-finally捕获异常,那么无论异常是否产生都要执行finally部分语句。finally通常用来文件关闭,释放锁,数据库连接返还给连接池等。

    def division(a,b):
        try:
            result = a/b
            print("return----before")
            return result
        except Exception as errorInfo:
            print("捕获异常信息:",errorInfo)
        else:
            print("没有异常,result=",result)
        finally:
            print("finally---让我来做最后的事情吧")
    
    division(100,20)
    print("--"*20)
    division(100,0)
    
    输出:
    return----before
    finally---让我来做最后的事情吧
    ----------------------------------------
    捕获异常信息: division by zero
    finally---让我来做最后的事情吧

      当程序产生异常时,先执行打印异常信息,然后执行finally语句。如果程序没有异常finally会在return之后立即执行。如果注释掉return result语句,在没有错误的情况下,else执行之后,才执行finally语句。

    return----before
    没有异常,result= 5.0
    finally---让我来做最后的事情吧
    ----------------------------------------
    捕获异常信息: division by zero
    finally---让我来做最后的事情吧

    自定义异常

    首先创建一个子类去继承Error或者Exception,然后使用raise引发一个异常。

    class ShortInputException(Exception):
    
        def __init__(self,length,atleast):
            super().__init__()
            self.length = length
            self.atleast = atleast
    def test():
        try:
            s = input("请输入:")
            if len(s) < 3:
                raise ShortInputException(len(s),3)
        except ShortInputException as info:
            print("ShortInputException: 输入的长度是 %d,长度至少应是 %d"% (info.length, info.atleast))
        else:
            print("--else--没有异常--")
    test()
    
    输出:
    请输入:abc
    --else--没有异常--
    请输入:as
    ShortInputException: 输入的长度是 2,长度至少应是 3
  • 相关阅读:
    [Ceoi2016|BZOJ4936] Match
    下载/拷贝下来的压缩包打开内容为空解决方案
    [POI2012]OKR-A Horrible Poem
    [SNOI2017]礼物
    LuoguP3398 仓鼠找sugar
    转:看图说话Image Caption之评价指标、NIC(Neural Image Caption)模型和attention
    转:Cascade R-CNN,一个使你的检测更加准确的网络
    图像理解之物体检测object detection,模型rcnn/fastrcnn/fasterrcnn原理及概念
    深度残差网络
    转:图像分类、物体检测、物体分割、实例分割、语义分割
  • 原文地址:https://www.cnblogs.com/jsnhdream/p/10042268.html
Copyright © 2011-2022 走看看