python中的异常处理相关语句和迭代器
2021-06-21 20:04
标签:input iter 用户输入 bsp 异常流 导致 错误类型 函数返回 exe 异常(基础) exception try-finally 语句 raise 语句: aseert 语句 示例:#用迭代器和while来代替for循环 python中的异常处理相关语句和迭代器 标签:input iter 用户输入 bsp 异常流 导致 错误类型 函数返回 exe 原文地址:https://www.cnblogs.com/sky-ai/p/9682996.html
什么是错误
错误是指由于逻辑或语法等导致一个程序无法正常执行的问题
什么是异常
异常是程序出错时标识的一种状态
当异常发生时,程序不会再向下执行,而转去调用此函数的地方待处理此错误并恢复为正常状态
作用:
用作信号,通知上层调用者有错误产生需要处理
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
return 0
else:
return x
get_score()
语法:
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.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:
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)
语法:
assert 真值表达式,错误数据(通常是字符串)
作用:
当真值表达式为false时,用错误数据创建一个AssertionError类型错误,并进入异常状态
等同于:
if bool(真值表达式)==False:
raise AssertionError(错误数据)
示例见:
assert.pydef get_score():
s=int(input(‘请输入学生成绩:(0~100)‘))
assert 0"成绩超出范围"
#if bool(0
# 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))
iterator.py
练习:
有一个集合:
s={‘唐僧‘,‘悟空‘,‘白洁‘,‘沙僧‘}
用for进行遍历s={‘唐僧‘,‘悟空‘,‘白洁‘,‘沙僧‘}
it=iter(s)
while True:
try:
print(next(it))
except StopIteration:
print(‘Bianlijieshu‘)
break