• python中的异常处理相关语句和迭代器


    异常(基础) exception
    什么是错误
        错误是指由于逻辑或语法等导致一个程序无法正常执行的问题
    什么是异常
        异常是程序出错时标识的一种状态
        当异常发生时,程序不会再向下执行,而转去调用此函数的地方待处理此错误并恢复为正常状态
      作用:
        用作信号,通知上层调用者有错误产生需要处理
    try语句:
        两种语法:
        try- except
        try --finally 语句
    try-except语句
        语法:
        try:
            可能触发异常的语句
        except 错误类型1 [as 变量名1]:
            异常处理语句1
        except 错误类型2 [as 变量名2]:
            异常处理语句2
        except (错误类型3,错误类型4) [as 变量3]:
            异常处理语句3
        except:
            异常处理语句other
        else:
            未发生异常语句
        finally:
            最终语句
        作用:
        尝试捕获异常通知,将程序由异常流程转为正常流程并继续执行
        说明:
            except子句可以有一个或多个,但至少一个
        示例I;
    练习:
    写一个函数,get_score()来获取学生输入的成绩(0~100)的数,如果用户输入的不是0~100的整数则返回0,
    否则返回输入的整数
    def get_score():
        try:
            x=input('请输入一个数')
        except:
            print('unexpect int')
        else:
            if 0<=x<=100:
                return 0
            else:
                return x
    get_score()

    try-finally 语句
        语法:
            try:
                可能触发异常的语句
            finally:
                最终语句
        说明:
            finally子句不可以省略
            一定不会存在except子句
        作用:
            通常用try-finally语句来做触发异常时必须要处理的事情,无论异常是否发生,finally子句都会被执行
        try-finally 语句不会改变程序的(正常/异常状态)

    def fry_egg():
        print('打开天然气...')
        try:
            count=int(input('请输入鸡蛋个数:'))
            print('完成煎蛋,总煎%d个鸡蛋'%count)
        finally:
            print('关闭天然气')
    try:
        fry_egg()
    except SyntaxError:
        print('煎鸡蛋时,发生异常,已转为正常')

     

    raise 语句:
      作用:
        触发一个错误,让程序进入异常状态
        发送错误通知给调用者
      语法:
        raise 异常类型
        或
        raise 异常对象
        或
        raise  # 重新触发上一次异常
      示例见:raise.py
        raise2.py

    # def make_exercise():
    #     print('函数开始')
    #     raise ZeroDivisionError
    #     print('函数结束')
    # # make_exercise()
    # print('程序结束')
    
    # try:
    #     make_exercise()
    # except ZeroDivisionError:
    #     print('接受到make_ex发出的错误通知')
    # print('程序正常结束')
    
    def make_exercise():
        print('函数开始')
        # raise ZeroDivisionError
        e=ValueError('值错误')  #创建一个错误对象
        raise e
        print('函数结束')
    # make_exercise()
    print('程序结束')
    
    try:
        make_exercise()
    except ZeroDivisionError:
        print('接受到make_ex发出的错误通知')
    except ValueError as err:
        print('valueerror--->',err)
    print('程序正常结束')
    #此示例示意raise无参的用法
    
    def fa():
        print('----fa----开始')
        raise ValueError('故意制造一个错误!')
        print('----fa----结束')
    def fb():
        print('fb开始')
        try:
            fa()
        except ValueError as err:
            print('fa里发生了值错误已处理')
            raise
            #此处如果要将err 再次向上传递
        print('fb结束')
    try:
        fb()
    except ValueError:
        raise
        print('再一次收到fb内部发生的错误')

     


    练习1
    写一个函数get_age()用来获取一个人的年龄信息此函数规定用户只能输入1~140之间的整数,如果用户输入得数是其他
    的数值,则直接触发valueError类型错误!
    如:

    def get_age():
        x=int(input('请输入您的年龄,范围(1~140)'))
        # if x not in range(1,140):
        #     raise ValueError('类型错误')
        if x<1:
            raise ValueError('您的年龄太小')
        if x>140:
            raise ValueError('您的年龄太大')
        return x
    try:
        age=get_age()
        print('用户输入的年龄是',age)
    except ValueError as err:
        # raise
        print('用户输入的不是140以内的数字,获取年龄失败')
        print('err=',err)

     

    aseert 语句
        语法:
        assert 真值表达式,错误数据(通常是字符串)
        作用:
            当真值表达式为false时,用错误数据创建一个AssertionError类型错误,并进入异常状态
        等同于:
            if bool(真值表达式)==False:
                    raise AssertionError(错误数据)
        示例见:
            assert.py

    def get_score():
        s=int(input('请输入学生成绩:(0~100)'))
        assert 0<=s<=100 ,"成绩超出范围"
        #if bool(0<=s<=100):
            # raise AssertionError("成绩超出范围")
        return s
    try:
        score=get_score()
        print('学生的成绩为:',score)
    except AssertionError as err:
        print('AssertionError类型的错误被触发,且已捕获')
        print('err=',err)

     


    小结: 
        异常处理相关的语句
            try-except
            作用:捕获异常通知,将程序有异常状态转为正常状态
            try-finally
            作用:执行必须要执行的语句
            raise
            作用:触发异常(抛出异常),让程序进入异常流程
            assert
            作用:根据条件来触发AssertionError类的异常并进入异常流程
    迭代器 Iterator
        什么是迭代器
            迭代器是访问可迭代对象的工具
            迭代器是指用iter(obj)函数返回的对象(实例)
            迭代器可以用next(it)函数获取可迭代对象的数据
        迭代器函数:
            iter(iterable)从可迭代对象中返回一个迭代器,iterable必须是能提供一个迭代器的对象
            next(iteerable)从迭代器iterable中获取下一个记录,如果无法获取下一条记录,则触发
            StopIteration异常通知
        说明:
            迭代器只能往前取值,不会后退
        示例:
    l=[1,2,3,4]
    it=iter(l)
    print(next(it))

    示例:#用迭代器和while来代替for循环
        iterator.py
    练习:
        有一个集合:
            s={'唐僧','悟空','白洁','沙僧'}
        用for进行遍历

    s={'唐僧','悟空','白洁','沙僧'}
    it=iter(s)
    while True:
        try:
            print(next(it))
        except StopIteration:
            print('Bianlijieshu')
            break

     

  • 相关阅读:
    二 ,Smarty模板技术/引擎——变量操作(1)
    一,Smarty模板技术/引擎——简介
    MVC模式学习--雇员管理系统项目开发
    mysqli扩展库---------预处理技术
    drupal7 上传文件中文乱码
    php根据IP获取IP所在城市
    php获取客户端IP
    drupal中安装CKEditor文本编辑器,并配置图片上传功能 之 方法一
    drupal7的node的内容的存储位置
    drupal7 安装百度编辑器Ueditor及后续使用
  • 原文地址:https://www.cnblogs.com/sky-ai/p/9682996.html
Copyright © 2020-2023  润新知