首页 > 其他分享 >异常处理与生成器对象和生成器表达式

异常处理与生成器对象和生成器表达式

时间:2022-10-17 20:55:05浏览次数:43  
标签:__ 错误 代码 生成器 except try 异常 表达式

异常常见类型

syntaxError  语法错误
NameError    当你引用了变量、模块、类、函数或代码中没有定义的其他名称时,将引发 NameError
IndexError   当你尝试从序列(如列表或元组)中检索索引,但是序列中找不到该索引。此时就会引发 
KeyError 与 IndexError 类似,当你访问映射(通常是 dict )中不包含的键时,就会引发 KeyError indentationError 缩进错误
.............

异常处理语法结构

1.基本语法结构
  try:
      待监测的代码(即可能还出现错误的代码)
  except 错误类型:
    针对上述错误类型制定的方案   

基本语法结构.png

2.查看错误的信息
try:
    待监测的代码(可能会出错的代码)
except 错误类型 as e: # e就是系统提示的错误信息
    针对上述错误制定的方案  
 '''就算是报错了也不影响后面代码的运行'''

进阶.png

3.针对不同的错误类型定制不同的解决方案
try:
    待监测的代码
except 错误类型1 as e:  # e就是系统提示的错误信息
  针对上述错误1制定的方案
except 错误类型2 as e:  # e就是系统提示的错误信息
   针对错误类型2定制的错误方案
except 错误类型3 as e: # e就是系统提示的错误信息
   针对错误类型3定制的错误方案    

预案.png

4.万能异常 Exception/BaseException
try:
    待监测的代码
except Exception as e: #e 就是系统提示的错误信息
    针对各种常见的错误类型全部统一处理 (也就是啥错误类型都管)

全能.png

5.结合else使用
try:
    待监测的代码
except Exception as e:
    针对各种常见的错误类型全部统一处理
else:
    try的子代码正常运行结束没有任何的报错后 再执行else子代码

else.png

6.结合finally使用
try:
    待监测的代码
except Exception as e:
    针对各种常见的错误类型全部统一处理
else:
    try的子代码正常运行结束没有任何的报错后 再执行else子代码

兜底.png

异常处理补充

1.断言
     name = 'jason'
    assert isinstance(name,str)
    print('哈哈哈')
    name.strip()
   '''跟猜差不多如果这个类型猜错了则直接报错 ,若没错继续执行'''
2.主动抛异常
 name = 'jason'
 if name == 'jason':
    raise Exception('不干了')
 else:
    print('正常走')
  '''作用为主动让代码报错就好比老赖去做飞机然后买机票一看是他根本就不让他买'''

异常处理的实战应用

1.异常处理能尽量少用就少用
2.被try监测的代码能尽量少就尽量少
3.当代码中可能会出现一些无法控制的情况报错才考虑使用
     比如用户手机访问网页时 突然断网
练习:
    使用while循环+异常处理+迭代器对象 完成for循环迭代取值的功能
    l1 = [11,22,33,44,55,6,77,88,99]
    # 1.先将列表调用_iter_转变成迭代器对象
    iter_l1 = l1._ _iter_ _()
    # 2.while循环让迭代器对象反复执行_next_
    while True:
        try:
            print(iter_l1._ _next_ _())
        except StopIteration as e:
            break

生成器对象

1.本质

还是要__iter__和__next__的迭代器对象

2.区别

迭代器对象是解释器自动提供的
      数据类型\文件对象>>>:迭代器对象(生成器)

3.创建生成器的基本语法

函数代码中填写yieid关键字
def my_iter():
    print('hahahaha')
    yield
'''
1.函数体代码中如果有yield关键字那么函数名加括号并不会执行函数体代码
会生成一个生成器对象也就是迭代器对象
'''
res = my_iter()
'''2.使用加括号之后的结果调用__next__才会执行函数体代码'''
res.__next__()
'''3.每次执行完__next__代码都会停在yield位置 下次基于该位置继续往下找第二个yield'''

yelid.png

练习

自定义生成器对标range功能(一个参数 两个参数 三个参数 迭代器对象)
for i in range(1,10):
    print(i)
1.先写两个参数的
def my_iter(kaishiwei,jieshuwei):
    while kaishi<jieshu
	yield kaishi      #返回
    kaishi +=1
for i in my_iter(1,10):
    print(i)
2.再写一个参数的
def my_lter(kaishi,jieshu=None)
if not jieshu:
    jieshu = kaishi
    kaishi = 0
    while kaishi<jieshu
    yield kaishi
    kaishi +=1
for i in my_letr(100):
    for i in(100)
3.最后写三个参数的
def my_letr(kaishi, jieshu=None, jiange=1)
while kaishi<jieshu:
    yield kaishi
    kaishi += jiange
for i in my_letr(1,10,3):
    print(i)

底层.png

生成器表达式

说白了就是生成器的简化写法
l1 = (i ** 2 for i in rang(100)) # 生成器对象
print(l1)  # <generator object <genexpr> at 0x000001DFC07F7E40>
for i in l1:
    print(i)

一道面试题

def add(n, i): #普通函数 返回两个数的和 求和函数
    return n + i
def test(): # 生成器
    for i in range(4):
        yield i
g = test() #激活生成器
for n in [1, 10]:
    g = (add(n,i) for i in g)
    """
    第一次 for 循环
     g = (add(n,i) for i in g)
    第二次for 循环
    g = (add(1o, i)for i in (add(10,i)for i in g))
    """
res = list(g)
print(res)

A: res=[10,11,12,13]
B: res = [11,12,13,14]
c: res = [20,21,22,23]
d: res = [21,22,23,24]
'''不用深入研究 大致知道起始数即可'''

标签:__,错误,代码,生成器,except,try,异常,表达式
From: https://www.cnblogs.com/wwssadadbaba/p/16800633.html

相关文章

  • 一篇搞定Python正则表达式
    ​1.正则表达式语法1.1字符与字符类1特殊字符:.^$?+*{}[]()|以上特殊字符要想使用字面值,必须使用进行转义2字符类  1.包......
  • 3.lambda表达式
    一、说明Lambda表达式是什么Lambda表达式也称为闭包,是Java8发布的新特性Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)为什么要使用Lambda表达......
  • 异常处理与生成器对象
    异常常见类型异常类型有很多种异常类型就是我们一段代码在运行时遇到bug终止运行.返回给我们一段报错信息,其中就有异常类型。SyntaxError语法错误NameError名字错误......
  • 异常处理、生成式对象
    1.异常常见类型SyntaxError:语法错误NameError:名字错误,一般由于变量名未定义造成IndexError:索引错误,列表的索引值超过了范围KeyError:字典键错误,字典的键找不到Inde......
  • 实验1C语言开发环境使用和数据类型,运算符,表达式
    #include<stdio.h>#include<stdlib.h>intmain(){printf("0\n");printf("<H>\n");printf("II\n");printf("0\n");printf("<H>\n");pr......
  • 异常处理及生成器
    异常处理及生成器异常处理1.异常 异常就是代码运行报错,行业俗称叫bug 代码运行中一旦遇到异常会直接结束整个程序的运行,我们在编写代码的过程中要尽可能的避免2.异常......
  • 异常处理(补充)及生成器基础知识
    昨日内容回顾重要内置函数map()映射 zip()拉链 filter()过滤 sorted()排序常见内置函数abs() round() bytes() int() bin() oct() hex() chr() ord() eval() exec(......
  • 分别使用BP/RBF/GRNN神经网络识别航迹异常matlab仿真
    一、理论基础1.1基于BP神经网络的识别1.2基于RBF神经网络的识别1.3基于GRNN神经网络的识别二、核心程序三、仿真测试结果作者ID:fpga和matlabCSDN主页:https://blog.c......
  • 正则表达式
    •介绍毫无疑问,正则表达式是个很神奇的工具,当然还有点晦涩。在各种语言中,对正则表达式的实现不太一样。这里会介绍标准的正则表达式,以及具体语言的不同之处。•分组应用......
  • 异常处理 生成器
    今日内容异常常见类型NameErrorIndentationErrorSyntaxErrorKeyErrorSyntaxError异常处理语法结构1.基本语法结构try:待检测的代码(可能会出现错误的代码......