码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-09-20 20:20:31      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:input   iter   用户输入   bsp   异常流   导致   错误类型   函数返回   exe   

异常(基础) 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

 

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

标签:input   iter   用户输入   bsp   异常流   导致   错误类型   函数返回   exe   

原文地址:https://www.cnblogs.com/sky-ai/p/9682996.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!