首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

同样都是捕获异常,为啥要不一样呐?

中对于「捕获异常」是有区别的,虽然我一直用的是 Python3,但是还是依然有一部分读者用的是 Python2,所以我准备再用这一篇文章来写一下不同版本的 Python 对于捕获异常的差异,顺便再补充一下捕获多个不同的异常应该如何去做...捕获异常 下面我主要用一个例子的方式来演示 Python2 和 Python3 对于捕获异常的差异所在: my_list = [1,2,3,4] try: # 抛出异常 IndexError...这个是因为我们我们想要同时获取多个不同类型的异常,我们需要将它们用括号把它们包成一个元组作为第一个参数传递,这个是必须的,第二个参数的话就是「可选名称」,如果你写的话它就会和被捕获的异常实例绑定,不写也没什么问题...,具体请看下例: my_list = [1,2,3,4] try: # 抛出异常 IndexError print(my_list[10]) except (IndexError, ValueError...其实这是因为在 Python3 中用逗号区分异常与可选名称是无效的; 正确的做法是使用 as 关键字,具体如下所示: my_list = [1,2,3,4] try: # 抛出异常 IndexError

32720
您找到你想要的搜索结果了吗?
是的
没有找到

异常

异常处理 try...except...:   1.在try语句中捕获异常,在except语句中处理异常。...当try所包含的语句中没有异常,程序正常执行,except语句被忽略,不再执行;当try语句中捕获到了异常,try语句从异常出现的位置都不再执行,而是执行except语句进行异常处理。   ...3.try后还可以有多个except语句,每个except语句都可以用来处理某一类的异常,当try捕获到了某个异常,就会跳到相应的except语句中进行异常的处理。...5.如果except语句中对异常处理的要求不严格,不需要具体的处理某一类的异常,可以直接使用except或者except Exception, e或者except Exception as e来捕获所有类型的异常...当只使用raise关键字,而没有自定义异常,它会将当前位置发生的异常向上抛出,抛到上一级位置。

1.1K50

关于Python异常处理,你需要了解的知识点

这时候,就需要捕获处理它,否则程序会终止执行。 异常处理 使用try/except/finally语句进行捕获操作,并告诉Python发生异常如何处理。...首先,检测try语句块中的错误,except语句捕获异常信息并处理。如果在try子句执行时没有发生异常,Python将执行else语句后的语句,然后控制流通过整个try语句。...如何捕获多个异常? 1.写出多行except 异常/错误,指定捕获多个不同类型的异常。2.使用 except (异常1,异常2..),使用元组,在一行中捕获多个不同类型的异常。...异常捕获示例代码: try: print(10/0) except NameError: print('出现 NameError 异常') except ZeroDivisionError...: print('出现 ZeroDivisionError 异常') except IndexError: print('出现 IndexError 异常') except Exception

1.4K61

Python异常处理详解

: string index out of range 可以使用try/except捕获异常。...raise IndexError raise IndexError() 可以为异常类构建实例指定点参数信息,这些参数会保存到名为args的元组。...所以能通过空的except:捕获到它,却不能通过except Exception:来捕获。...但是在最外面,使用try包围action1()的调用,看上去异常也会被捕获,但实际上并不会,因为在action2()中就已经通过except处理好了异常,而处理过的异常将不再是异常,不会再触发外层的异常...本来是想在外层的try中明确捕获func触发的IndexError异常的,但是func()内却使用了空的except:,使得异常直接在这里被处理,外层的try永远也捕获不到任何该函数的异常。

1.6K20

Python3之异常,调试和测试

UnicodeEncodeError Unicode 编码错误 UnicodeTranslateError Unicode 转换错误 Warning 警告的基类 DeprecationWarning...as e: # 捕获到异常,程序直接报错 print e 多分支 s1 = 'hello' try: int(s1) except IndexError as e: print...多分支后来一个Exception s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as...语句无论是否发生异常都将执行最后的代码 s1 = 'hello' try: int(s1) except IndexError as a: print(e) except KeyError...,才应该加上try…except 记录错误 如果不捕获错误,自然可以让Python解释器来打印出错误堆栈,但程序也就结束了,既然我们能捕获错误,就可以把错误堆栈打印出来,然后分析错误原因,同时让程序继续执行下去

1.4K40

Python编程思想(33):异常类与多异常捕获

异常类 当 Python解释器接收到异常对象,如何为该异常对象寻找 except块呢?注意到前面的代码中的except块,这个块是专门用于处理该异常类及其子类的异常实例。...当程序发生不同的意外情况,系统会生成不同的异常对象, Python解释器就会根据该异常对象所属的异常类来决定使用哪个 except块来处理该异常。...多异常捕获 Python的一个 except块可以捕获多种类型的异常。在使用一个 except捕获多种类型的异常,只要将多个异常类用圆括号括起来,中间用逗号隔开即可。...): print("程序发生了数组越界、数字格式异常、算术异常之一") except: print("未知异常") 在这段程序中使用了 (IndexError, ValueError,...ArithmeticError)来指定所捕获的异常类型,这就表明该 except块可以同时捕获这3种类型的异常。

72820

Python 编程 | 连载 18 - 异常处理

捕获异常 可以对try-except代码中的异常进行捕获,再不确定是那种异常的情况下可以使用异常的基类Exception进行捕获 def divid(x, y): res = 0 try...res 程序运行还是出错,这是因为异常类型不匹配,所以没有捕获到,在进行异常处理如果可以确定具体的异常类型就使用具体的异常类型,如果不确定就是用基类异常,使用的异常不匹配程序仍然不能正确执行 捕获多个异常...可以通过连续添加except代码块的方式捕获多个异常。...as e3: # 代码块 当 except 代码块有多个的时候,当异常类型匹配后,就不会继续往下捕获,也可以使用元组将所有待捕获的异常存起来。...] except IndexError as e: print(e) ValueError ValueError 常出现在数据类型转换 name = 'stark' print(int(name

59730

Python抛出异常_python抛出异常的作用

使用if判断式可以异常处理,但是if判断式的异常处理只能针对某一段代码,对于不同的代码段的相同类型的错误你需要写重复的if来进行处理。...python特定的语法结构捕获异常 #异常捕获 单个分支 try: 逻辑代码(被捕获得内容) except 异常类型: 检测到异常,就执行这个位置的逻辑 # 多个分支捕获 #...单分支只能用来处理指定的异常情况,如果捕获到异常,则报错 try: abc() except ValueError: print('异常输出') except IndexError:...print('异常输出') # Exception 属性可以捕获任意异常,不过它是一把双刃剑,有利有弊,我们要视情况使用 try: abc() except Exception as..., 结果为raise一个AssertionError出来 用sys模块回溯最后的异常 当发生异常Python会回溯异常,给出大量的提示,可能会给程序员的定位和纠错带来一定的困难,这是可以使用sys模块回溯最近一次异常

2.5K70

python基础学习15----异常处理

IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包;基本上是路径问题或名称错误 IndentationError 语法错误(的子类) ;代码没有正确对齐 IndexError...映射中没有这个键 MemoryError 内存溢出错误(对于Python 解释器不是致命的) NameError 未声明/初始化对象 (没有属性) UnboundLocalError 访问初始化的本地变量...UnicodeEncodeError Unicode 编码错误 UnicodeTranslateError Unicode 转换错误 Warning 警告的基类 DeprecationWarning...,处理异常 只有将对应的异常类型捕获才能进行异常的处理 异常的捕获处理方式: try: #程序执行的代码,异常检测的代码 pass except Exception as e:...pass 这里的except就像是java里的catch 也可以在代码中添加多个except语句来捕获不同种类型的异常,执行相应不同的操作 3.主动抛出异常 异常的抛出可以手动添加 try:

1.6K10
领券