首页 > 其他分享 >异常生成器

异常生成器

时间:2022-10-17 18:36:07浏览次数:47  
标签:res 生成器 yield add print 变量名 异常

目录

异常生成器

异常常见类型

语法错误  SyntaxError
if
name    NameError
逻辑错误
l1 = [1,2,3] 
l1[10] IndexError
d1 = {'age':18}
d1['name'] KeyError

异常处理语法结构

1.基本语法结构
try:
    待监测代码(可能会出错的代码)
except 错误类型:
    针对错误类型所作出的操作
2.查看错误信息
try:
    待监测代码(可能会出错的代码)
except 错误类型 as 变量名:
    print(变量名)
    针对上述错误类型制定的方案
    
3.针对不同的错误类型制定不同的解决方案
try:
    待监测代码(可能会出错的代码)
except 错误类型1 as 变量名:
    print(变量名)
    针对上述错误类型1制定的方案
except 错误类型2 as 变量名:
    print(变量名)
    针对上述错误类型2制定的方案
except 错误类型3 as 变量名:
    print(变量名)
    针对上述错误类型3制定的方案
    
4.万能异常 Exception/BaseException
try:
    待监测代码(可能会出错的代码)
except Exception as 变量名:
    print(变量名)
    只有出错就执行的方案
    
5.与else连用
try:
    待监测代码(可能会出错的代码)
except 错误类型1 as 变量名:
    print(变量名)
    针对上述错误类型1制定的方案
except 错误类型2 as 变量名:
    print(变量名)
    针对上述错误类型2制定的方案
except 错误类型3 as 变量名:
    print(变量名)
    针对上述错误类型3制定的方案
else:
    没有出错执行这里的代码,否则不执行
    
6.与finally连用
try:
    待监测代码(可能会出错的代码)
except 错误类型1 as 变量名:
    print(变量名)
    针对上述错误类型1制定的方案
except 错误类型2 as 变量名:
    print(变量名)
    针对上述错误类型2制定的方案
except 错误类型3 as 变量名:
    print(变量名)
    针对上述错误类型3制定的方案
else:
    没有出错执行这里的代码,否则不执行
finally:
    不论错误不错误,最终都要执行的代码
    

异常处理补充

1.断言
	name = 'jason'
    assert isinstance(name,int)  # 不是直接异常
    assert isinstance(name,int)  # 是继续向下执行
    print('abc,字符串')

2.主动抛出异常
	name = 'jason'
    if name == 'jason':
        raise Exception('不行')
    else:
        print('正常运行')

异常处理实战应用

1.异常处理尽量能少用就少用
2.被try监测的代码能尽量少就少
3.当代码中可能会出现一些情况无法控制的是时候才应该考虑使用
	eg:手机访问网络软件 断网
        
使用while循环+异常处理+迭代器对象 完成for循环迭代取值的功能
l1 = [1, 2, 3, 4, 5, 6]

res = l1.__iter__()
while True:
    try:
        print(res.__next__())
    except StopIteration as e:
        break

生成器对象

1.本质
	还是内置有__iter__() __next__()的迭代器对象
2.区别
	迭代器对象是解释器自动提供的
    	数据类型、文件对象  迭代器对象
    生成器对象是程序员自己创建的
    	代码、关键字  迭代器对象(生成器)
3.创建生成器的基本语法
	def 函数名():
        函数体
        yield  # 不再是return了
	def name():
        print('进入函数内')
        yield 
   '''
   1.函数体代码有yield关键字,那么函数名加括号就不会立即执行,会生成一个生成器对象(迭代器对象)
   '''
   '''
   res = name()
   2.使用加括号之后的结果调用__next__才会执行函数体代码
   
   '''
	'''
	res.__next__()
	3.每次执行完__next__(),代码都会停在yield位置 下次基于该位置继续往下找第二个yield
	'''

	def name():
        print('第一次')
        yield 1
        print('第二次')
        yield 2
        print('第三次')
        yield 3
        print('第四次')
        yield 4
    res.__next__()
    res.__next__()
    res.__next__()
    res.__next__()
    '''
    第一次
    1
    第二次
    (1, 2)
    第三次
    (1, 2, 3)
    第四次
    (1, 2, 3, 4)
    4.yield 还类似于 return 可以返回返回值
    '''
        
	def name():
        return 指定报错信息 # 遇到return会立即结束,然后报错
    	print('第一次')
        yield 1
        print('第二次')
        yield 2
        print('第三次')
        yield 3
        print('第四次')
        yield 4
    '''
    5.遇到return立即报错
    '''
           
        

手动实现range简单功能


def my_range(start,end=None,step=1):
    if not end:
        end = start
        start = 0

    while start<end:
        yield start
        start += step
res = my_range(10,19,2)
print(res.__next__())
print(res.__next__())
print(res.__next__())

可不可以,实现负数步长
def my_range(start, end=None, step=1):
    if not end:
        end = start
        start = 0

    dstep = abs(step)
    dstart = start
    while start < end:
        yield end-start + dstart if step < 0 else start
        start += dstep

res = my_range(9, 19, -3)
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())

yield冷门用法

def name(name,age=10):
    print(name,age)
    age = yield 1
    print(name,age)
    yield

res = name('张')
res.send(None)  # 使用send启动一定现有发送一次None
res.send('abc')  # 将括号内的数据值传递给 yield前的变量名然后自动调用双下next

生成器表达式

生成器表达式,其实就是简化写的方式
t = (x+2 for x in range(10))
t 为生成器对象
'''<generator object <genexpr> at 0x0000021E045F9900>'''
for i in t:
    print(i)
    '''
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    '''
    
    
"""
面试题(有难度)
	大致知道流程即可
"""
def add(n, i):  # 普通函数 返回两个数的和  求和函数
    return n + i
def test():  # 生成器
    for i in range(4):
        yield i
g = test()  # 激活生成器  #<generator object test at 0x000002A042199900>#(1,2,3,4)
for n in [1, 10]:
    g = (add(n, i) for i in g)
    # g=(add(n, 0),add(n, 1),add(n, 2),add(n, 3)) n=1不使用,因为是生成不允许
    # <generator object <genexpr> at 0x0000024D7F872580>
    # g=(add(n, add(n, 0)),add(n, add(n, 1)),add(n, add(n, 2)),add(n, add(n, 3))) n=10不使用,因为是生成不允许
    # <generator object <genexpr> at 0x0000024D7F872430>

    """
    第一次for循环
        g = (add(n, i) for i in g)
    第二次for循环
        g = (add(10, i) for i in (add(10, i) for i in g))
    """
print(g)
#n=10 不使用,因为是生成不允许
for i in g: # g=(add(n, add(n, 0)),add(n, add(n, i)),add(n, add(n, 2)),add(n, add(n, 3)))
    # 不使用,因为是生成不允许 到这里开始使用n的数据值
    print(i) #20
'''
20
21
22
23
'''
# res = list(g)
# print(res)
#c
#A. res=[10,11,12,13]
#B. res=[11,12,13,14]
#C. res=[20,21,22,23]
#D. res=[21,22,23,24]
'''不用深入研究 大致知道起始数即可'''
    
    
    

标签:res,生成器,yield,add,print,变量名,异常
From: https://www.cnblogs.com/clever-cat/p/16800169.html

相关文章

  • 关于System.InvalidOperationException:“Nullable object must have a value.异常
    关于System.InvalidOperationException:“Nullableobjectmusthaveavalue.异常,检查数据库的设计以及EF中的实体模型是否准确首先出现这个问题的原因在于你所要获取的......
  • python学习记录:简单二维码生成器源码
     Function:  二维码生成器Author:  琴棋书画'''importioimportsysimportqrcodefromPyQt5importQtWidgets,QtGuifromPyQt5.QtWidgetsimportQA......
  • 关于异常-git日常开发问题
    问题解决方法      是.husky下面的pre-commit已经存在了删除掉这个pre-commit文件再从stash里把内容Apply拿出来提交就可以了 ......
  • 生成器
    目录今日内容回顾今日内容详情异常常见类型异常处理语法结构异常处理补充异常处理实战应用生成器对象生成器练习yield冷门用法生成器表达式今日内容回顾异常常见类型异......
  • 异常处理语法结构、yield生成器及其表达式
    今日内容回顾目录今日内容回顾异常处理语法结构异常处理实战应用生成器对象自定义range功能yield冷门用法yield与return对比生成器表达式笔试题异常处理语法结构异常处......
  • day16 异常处理生成器
    day16异常处理生成器今日内容概要异常处理异常处理实战应用生成器对象生成器对象实现range方法生成器表达式今日内容详细一、异常处理1.异常常见类型Synt......
  • python进阶之路15 之异常处理、生成器相关
    异常捕获处理1.异常异常就是代码运行报错行业术语叫bug代码运行中一旦遇到异常会直接结束整个程序的运行我们在编写代码的过程中要尽可能避免2.异常分类......
  • python基础之生成器
    异常处理语法结构异常处理实战应用生成器对象生成器对象实现range方法生成器表达式生成器笔试题模块简介今日内容详细异常常见类型SyntanxError语法错误Nam......
  • 进入python的世界_day16_python基础——异常捕获的处理、生成器对象、生成器表达式
    一、异常捕获1.错误类型语法错误>>>syntaxerror名字错误>>>namerror索引错误>>>Indexerror缩进错误>>>indentationerror等等......2.异常处理语法结构1.语法结......
  • 异常、生成器、自定义range
    目录今日内容概要今日内容详细异常常见类型异常处理语法结构异常处理补充异常处理实战应用生成器对象课堂练习yield冷门用法生成器表达式今日内容概要异常处理语法结构......