迭代器

迭代器可以用来遍历字符串、列表、元组、集合、字典。

myString="hello"
myIter=iter(myString) ##iter()函数可以获取元素集的一个迭代器
for i in myIter: #遍历每个字符
print(i) myList=[1,2,3,4]
myIter=iter(myList)
for i in myIter: #遍历列表、元组、集合
print(i) mySet={"name":"张三","age":18}
myIter=iter(mySet) #字典比较特殊,获取到的是key的迭代器
for i in myIter: #i表示一个key
print(i) #输出key
print(mySet.get(i)) #输出对应的value

可以使用next()获取下一个元素:

myList=[1,2,3,4]
myIter=iter(myList)
i=next(myIter) #获取迭代器中的下一个元素,参数是迭代器。最初指针指向第一个元素之前。
print(i) #
print(next(myIter)) #

错误、异常处理

try:
print(2/0) #可能出现问题的语句块
except Exception as e: #捕获异常,try和except必须配对使用,如果有try,就必须要有except来捕获处理。
print(e) #处理异常,如果不想处理,可使用raise再次抛出此异常,交给上一级程序单元来处理。
else: #可选,如果try语句块没有出问题,那么try语句块执行完毕就会自动执行else语句块
print("no error and exception")
finally: #可选,不管try语句出不出现问题,都会执行finally语句块
print("over")

except语句

ecxcept语句用来捕获、处理错误、异常。

a=input("请输入被除数:")
b=input("请输入除数:")
a=float(a) #从控制台输入的都是String类型,需要强制转换
b=float(b)
try:
print(a,"÷",b,"=",a/b)
except ZeroDivisionError as e: #捕获一个具体的异常。当然也可以直接捕获Exception,即捕获、处理所有的异常,但太笼统了,不方便对应处理异常。
print(e) #输出异常信息

as e  as是关键字,e是e是捕获的异常实例(对象),可以自己随便取名。

如果异常处理中用不到捕获的异常对象,可以不要as部分:

except ZeroDivisionError:
print("除数不能为0")

可以有多个except语句,但try语句块出现问题时,只会执行一个except语句(靠前的匹配)。

try:
#.....
except ZeroDivisionError:
print("除数不能为0")
except FileExistsError:
print("文件不存在")
except IndexError:
print("索引错误")

可以在一个except中捕获、处理多种异常:

try:
#....
except (ZeroDivisionError,FileExistsError,IndexError): #使用一个except捕获多种异常时,需要使用元组形式
#...

捕获所有种类的异常:

except Exception:  #捕获所有种类的异常
#...

如果是捕获所有种类的异常,可以缺省Exception,直接写成except:

except:
#...

raise语句

raise语句可以抛出一个异常:

def test():
print("start")
raise FileExistsError #抛出一个FileExistsError异常,可根据需要选择异常类
try:
test()
except Exception:
#处理

可以自定义异常信息:

def test():
print("start")
raise Exception("xxx错误") #括号中写自定义的异常信息
try:
test()
except Exception as e:
print(e) #xxx错误 输出我们自定义的异常信息

try语句块中,一旦抛出了异常,不管是程序本身出问题抛出的异常,还是我们手动抛出的异常,try语句块中后面的代码都不再执行:

try:
print("start")
raise Exception
print("end") #此句代码不会执行
except Exception:
print("exception")

使用了try,就必须要有except来捕获、处理异常,如果不想处理或者已处理一部分、但还需要交给上一级程序单元来继续处理,可以使用raise再次抛出异常。

在except语句中使用raise时,如果抛出的是当前捕获的异常,可以直接写成raise:

except ZeroDivisionError:
raise #把捕获的异常抛给上一级的程序单元处理

我们也可以先做一些处理,再抛给上一级程序单元做进一步处理。

当然,我们也可以自定义异常类,抛出自定义的异常:

class MyException(Exception):  #需要继承Exception类
#根据需要重写方法
try:
#...
raise MyException #抛出自定义的异常
except MyException as e:
#处理 可以调用我们重写的方法来处理

Python 迭代器,错误、异常处理的更多相关文章

  1. 【python】错误/异常处理,调试,测试

    try: print('try') r=10/2 print('result is:',r) #发生错误,会执行这部分 except ValueError as e: print('ValueErro ...

  2. python学习第十八天 --错误&异常处理

    这一章节主要讲解python的错误和异常处理 什么是错误和异常?及其区别? 错误: 1.语法错误:代码不符合解释器或者编译器语法. 2.逻辑错误:不完整或者不合法输入或者计算出现问题.   异常:执行 ...

  3. python 全栈开发,Day30(纸牌游戏,异常和错误,异常处理)

    一.纸牌游戏                                                                                              ...

  4. python基础之异常处理

    Python3 错误和异常 作为Python初学者,在刚学习Python编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍. Python有两种错误很容易辨认:语法错误和异常. ...

  5. 【Python笔记】异常处理

    1 什么是异常 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行.一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误. 当Pytho ...

  6. [Python Study Notes]异常处理

    正则表达式 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理 断言(Assertions) python标准异常 ...

  7. Python系列之 - 异常处理

    python提供的异常处理 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常 ...

  8. Python面向对象之异常处理

    1:什么是异常 异常就是在我们的程序在运行过程中由于某种错误而引发Python抛出的错误: 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序 ...

  9. python迭代器与iter()函数实例教程

    python迭代器与iter()函数实例教程 发布时间:2014-07-16编辑:脚本学堂 本文介绍了python迭代器与iter()函数的用法,Python 的迭代无缝地支持序列对象,而且它还允许程 ...

  10. Python 基础之 异常处理

    python 基础之异常处理 说到异常处理,就得先问一下,什么是异常处理?  先来看一下,什么是异常? 异常就是:程序运行时发出的错误的信号. 异常的种类先来看一下: 一.常见的异常 Attribut ...

随机推荐

  1. 在eclipse中打jar包

    在Eclipse中打jar包 步骤: 1. 在项目名称中点击右键,点Export... 2.选择java-->Java File, next 3. 选择你打算打包的文件.可以选择某几个文件,也可 ...

  2. python语言(七)面向对象、异常处理

    一.异常处理 python解释器检测到错误,触发异常(也允许程序员自己触发异常).程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关).如果捕捉成功则进入另外一个处理分 ...

  3. 【java】oracle好用,但java运行缺失右括号

    可能原因SQL拼接有空格被省略导致sql粘连. 解决办法,扩大拼接或者缩小拼接范围.

  4. es6 中的模块导入与nodejs 中模块的导入的异同!

    我们知道es6 的模块导入导出是通过import 和 export 来实现,而nodejs的模块导入导出是通过require 和module.exports 来实现,那么它们有什么异同吗? 请看如下: ...

  5. ORM属性/字段

    一. ORM字段   (models.py文件中创建类,继承models.Model) class Book(models.Model):  # 书籍列表 bid=models.AutoField(p ...

  6. 洛谷 P1965 转圈游戏

    洛谷 P1965 转圈游戏 传送门 思路 每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小伙伴走到第 m+1 号位置,--,依此类推,第n − m号位置上的小伙伴走到第 0 号 ...

  7. 复旦大学2018--2019学年第二学期(18级)高等代数II期末考试第六大题解答

    六.(本题10分)  设 $A$ 为 $n$ 阶实对称阵, 证明: $A$ 有 $n$ 个不同的特征值当且仅当对 $A$ 的任一特征值 $\lambda_0$ 及对应的特征向量 $\alpha$, 矩 ...

  8. struct utmp

    utmp结构体定义如下: structutmp { short int ut_type; // 登录类型 pid_t ut_pid; // login进程的pid char ut_line[UT_LI ...

  9. mysql(二)事务 & 事务的实现 & 锁

    参考文档: mvcc:https://www.cnblogs.com/chenpingzhao/p/5065316.html 事务的实现:https://www.linuxidc.com/Linux/ ...

  10. 1-7docke的网络模式

    1.Bridge模式 bridge 模式是 docker 的默认⽹络模式,不写 –net 参数,就是 bridge 模式.比如使⽤ docker run - p 时 工作模式从网上找了一个,如下 例子 ...