1、大部分的内置异常都是Exception的子类 2、Exception本身是从BaseException类继承过来的 3、因此所有的异常都是必须从BaseException类进行扩展 4、Exception...是BaseException类的子类,而NameError是Exception的子类,NameError是BaseException类的子子类(或者叫间接子类) 5、那么,有没有异常类是直接从BaseException...有,那就是下面的两个 SystemExit: 这个异常被引发的规则是:不管程序是否正常退出,SystemExit异常都会被触发 那么退出的动作,通常是在某段代码中调用了sys.exit...()之后就会触发SystemExit异常 SystemExit异常存在的意义是为了在程序退出之前清理代码,但无需显示的去处理它。 ...,会捕捉所有除了SystemExit和Keyboradinterrupt这两个特殊异常以外的其他异常,这是不推荐的做法 如果需要捕获任何异常(除了那两个特殊异常)推荐的做法是指明是except Exxception
Python标准异常 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception...异常Exception 所有内置的非系统退出的异常都是从这个类派生出来的。所有用户定义的异常也应该从此类派生。 更改版本2.5:更改为继承BaseException。...异常NotImplementedError 这个异常来源于RuntimeError。在用户定义的基类中,当抽象方法需要派生类覆盖该方法时,抽象方法应引发此异常。...异常ValueError 当内置操作或函数接收到具有正确类型但不正确值的参数时引发,并且情况未被更精确的异常描述,例如IndexError。 异常VMSError 仅适用于VMS。...该winerror和 strerror值是从的返回值创建 GetLastError()并FormatMessage()从Windows平台的API函数。
BaseException是所有内置异常的基类,但用户定义的类并不直接继承BaseException,所有的异常类都是从Exception继承,且都在exceptions模块中定义。...Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。一旦引发而且没有捕捉SystemExit异常,程序执行就会终止。...如果交互式会话遇到一个未被捕捉的SystemExit异常,会话就会终止。...内置异常类的层次结构如下: BaseException # 所有异常的基类 ±- SystemExit # 解释器请求退出 ±- KeyboardInterrupt # 用户中断执行(通常是输入^C)...±- RuntimeError # 在检测到不属于任何其他类别的错误时触发 | ±- NotImplementedError # 在用户定义的基类中,抽象方法要求派生类重写该方法或者正在开发的类指示仍然需要添加实际实现
异常 即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误,运行期检测到的错误被称为异常;大多数的异常都不会被程序处理,都以错误信息的形式展现。...Python 内置异常 我们先来看一下异常层次结构: BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +...,我们可以清晰的看出,BaseException为所有异常的基类,其下面分为:SystemExit、KeyboardInterrupt、GeneratorExit、Exception 四类异常,Exception...为所有非系统退出类异常的基类,Python 提倡继承 Exception 或其子类派生新的异常;Exception 下包含我们常见的多种异常如:MemoryError(内存溢出)、BlockingIOError...详细说明可以查看下面列表: 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception
异常处理是写好代码的一个重要的方面,虽然许多开发人员都熟悉基本的try-except块,但是有很多更深入的知识可以使异常处理更高效、更可读和更python化。...所以本文将介绍关于Python异常的20个可以显著改善编码的Python异常处理技巧,这些技巧可以让你熟练的掌握Python的异常处理。...Python中的异常是在程序执行期间发生的破坏了程序指令的正常流程的事件。与其他编程语言一样,Python使用异常来代表错误发生的信号,程序可以做出反应,并恢复或通知用户产生的问题。...常规except的Exception块会捕获从BaseException派生的异常,比如非常严重的错误我们可以派生字BaseException。...和SystemExit异常,以优雅地处理用户或系统启动的关机。
中,触发异常(也称异常抛出)可以使用 raise 语句,此语句支持强制触发指定的异常,不过其参数必须是异常实例或异常类(派生自 BaseException 类,例如 Exception 或其子类)。...BaseException 异常类型中的 add_note(note) 方法, 以便在异常实例中附加相信额外的信息,并将其添加到异常的注释列表。...特别注意,自定义异常都应该从 Python 的基类 Exception 继承....5.内置异常 描述: 在 Python 中,所有异常必须为一个派生自 BaseException 的类的实例。...在带有提及一个特定类的 except 子句的 try 语句中,该子句也会处理任何派生自该类的异常类(但不处理 它 所派生出的异常类)。
一、异常与错误Python机制设置了异常机制。异常指的是运行时程序遇到的可以被捕捉的错误。程序捕捉了异常,而不至于让程序运行错误而crash。异常增强了程序的运行可靠性。...__init__("Unknown ssid '%s'" % ssid)2.2 内置异常分类BaseException是所有异常的共同基类。它的一个子类Exception是所有非致命异常的基类。...不是Exception的子类的异常通常不被处理。它们被用来指示程序应该终止,包括由sys.exit()引发的SystemExit,以及当用户希望中断程序时引发的 KeyboardInterrupt。...完整的Python的Excpetion见下图:BaseException ├── BaseExceptionGroup ├── GeneratorExit ├── KeyboardInterrupt ├...except 子句可以用带圆括号的元组来指定多个异常。此外try除了except还可以带else。捕获异常的优先级分别是各个的except从上到下去比对。且认为派生类异常会等于基类异常。
但是对于SystemExit和KeyboardInterupt这两个异常,使用Exception是无法捕获的,因为它们不是Exception的继承者,原因很简单,因为这两个异常不是由于错误条件引起的。...但是这三者都有一个共同的基类,那就是BaseException,也就是这三者在程序结构上是同级的,如下: BaseException -KeyboardInterrupt -SystemExit...:捕获所有异常(错误与非错误条件引起的) 代码如下: try: name = raw_input('Your name:') except BaseException: ...触发一个异常,从cxclass生成一个实例(不含任何异常参数)raise exclass()同上,但现在不是类;通过函数调用操作符(其实就是指加上了`()`)作用于类生成一个新的exclass实例,同样也没有异常参数...另外,有3个直接从BaseException派生的异常子类: SystemExit KeyboardInterrupt Exception 其它的所有内建异常都是Exception的子类
BaseException是所有内置异常的基类,但用户定义的类并不直接继承BaseException,所有的异常类都是从Exception继承,且都在exceptions模块中定义。...Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。一旦引发而且没有捕捉SystemExit异常,程序执行就会终止。...如果交互式会话遇到一个未被捕捉的SystemExit异常,会话就会终止。...内置异常类的层次结构如下: BaseException # 所有异常的基类 +-- SystemExit # 解释器请求退出 +-- KeyboardInterrupt # 用户中断执行(通常是输入...+-- RuntimeError # 在检测到不属于任何其他类别的错误时触发 | +-- NotImplementedError # 在用户定义的基类中,抽象方法要求派生类重写该方法或者正在开发的类指示仍然需要添加实际实现
常见异常类型 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类...使用BaseException作为异常处理的基类并不常见,因为它包括了那些通常不被视为“异常”的情况,如SystemExit和KeyboardInterrupt(用户中断,如Ctrl+C)。...然而,通常你会更希望捕获Exception而不是BaseException,除非你有一个特定的理由需要处理包括SystemExit在内的所有异常。...SystemExit 异常继承自 BaseException,而不是更常见的 Exception。...然而,从Python 3.3开始,WindowsError 已经被视为 OSError 的一个子类,并且当在Windows平台上发生与操作系统相关的错误时,通常会直接引发 OSError 而不是 WindowsError
Python中的所有实例必须是从BaseException派生的类的实例。通过子类不相关的两个异常类,即使它们具有相同的名称,也永远不会等效。内置异常可以由解释器或内置函数生成。...基类 以下异常通常用作其他异常的基类。 1、exception BaseException 这是所有内置异常的基类。它并不意味着被用户定义的类直接继承。对于用户定义的类,使用Exception。...所有用户定义的异常也应从此类派生。...当派生类覆盖该方法时,用户定义的类中的抽象方法应引发此异常。...关联的值是一个字符串,指出出了什么问题。 exception SystemExit 调用sys.exit()函数时,将引发SystemExit。
1.异常的类型 异常的类型多种多样,常见的异常有: AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件...代码非法,代码不能编译(个人认为这是语法错误,写错了) TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量...,导致你以为正在访问它 ValueError 传入一个调用者不期望的值,即使值的类型是正确的 其他的异常: Exception可以捕获任意异常 BaseException 所有异常的基类 SystemExit...可疑的运行时行为(runtime behavior)的警告 SyntaxWarning 可疑的语法的警告 UserWarning 用户代码生成的警告 2.捕获异常,处理异常 只有将对应的异常类型捕获才能进行异常的处理...myException(BaseException): def __init__(self,message): self.message=message def __str
Exception 和 BaseException 当我们要捕获一个通用异常时,应该用Exception还是BaseException?我建议你还是看一下 官方文档说明,这两个异常到底有啥区别呢?...BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception +-- StopIteration...从Exception的层级结构来看,BaseException是最基础的异常类,Exception继承了它。...BaseException除了包含所有的Exception外还包含了SystemExit,KeyboardInterrupt和GeneratorExit三个异常。...有此看来你的程序在捕获所有异常时更应该使用Exception而不是BaseException,因为另外三个异常属于更高级别的异常,合理的做法应该是交给Python的解释器处理。
一、什么是异常 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下 ?...试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError 使用一个还未被赋予对象的变量 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误...,写错了) TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它 ValueError...传入一个调用者不期望的值,即使值的类型是正确的 2.2 其他异常 ArithmeticError AssertionError AttributeError BaseException BufferError...as e: print(e) 5.1 自定义异常 class EgonException(BaseException): def __init__(self, msg):
BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception +-- StopIteration...2.4 异常匹配原则 所有except子句按顺序一一匹配,匹配成功则忽略后续的except子句; 若抛出异常对象为except子句中给出的异常类型的对象或给出的异常类型的派生类对象,则匹配成功; 如果所有的...3.2 未捕获异常 第二种情况,如果异常没有被处理或者未被捕获则会在程序推出前调用sys.excepthook将traceback和异常信息输出到sys.stderr。...总结 python 异常处理: 使用对象来表示异常错误信息,每种异常均有一种对应的类,BaseException为所有表示异常处理类的基类。...程序执行过程中抛出的异常会匹配该对象对应的异常类和其所有的基类。 可以从内置类型的异常类派生出自定义的异常类。 被捕获的异常可以再次被抛出。
Python3常见错误 异常名称 描述 解决方法 BaseException 所有异常的父类 Python所有的错误都是从BaseException类派生的,是所有异常的父类 SystemExit 解释器请求退出...)试图访问已经垃圾回收了的对象 使用一个weakref代理访问已经被垃圾回收的对象时,会产生 RuntimeError 一般的运行时错误 如果没有其他更特定的异常可用,就要使用RuntimeError异常...运行检测到的错误被称为异常。 捕捉异常可以使用try/except语句。 try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。...#如果引发了'name'异常,获得附加的数据 else: #如果没有异常发生 以下为简单的try....except...else的语法: try: int("aaa")...#可能出现异常的代码 except IndexError as e: # 捕捉索引异常的子异常,注意,这里的as e在老版本的py中可以写成,e但是新版本中用as e,",e"未来可能会淘汰
异常处理介绍 异常处理的单分支 异常处理的多分支 接收抛出异常的值 其他格式 万能异常类型Exception:可以匹配任意类型的异常 try... else......,比如当x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError 使用一个还未被赋予对象的变量 SyntaxError...Python代码非法,代码不能编译(个人认为这是语法错误,写错了) TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量..., 导致你以为正在访问它 ValueError 传入一个调用者不期望的值,即使值的类型是正确的 更多异常 ArithmeticError AssertionError AttributeError BaseException...__dict__) # obj.tell_info() obj.set_info('zls',123) obj.tell_info() 自定义异常 了解: class MyException(BaseException
这个将会捕获除了 SystemExit 、 KeyboardInterrupt 和 GeneratorExit 之外的所有异常。...如果你还想捕获这三个异常,将 Exception 改成 BaseException 即可。 讨论 捕获所有异常通常是由于程序员在某些复杂操作中并不能记住所有可能的异常。...如果你不是很细心的人,这也是编写不易调试代码的一个简单方法。 正因如此,如果你选择捕获所有异常,那么在某个地方(比如日志文件、打印异常到屏幕)打印确切原因就比较重要了。...不过,要是你必须捕获所有异常,确保打印正确的诊断信息或将异常传播出去,这样不会丢失掉异常。...BaseException: os.remove(temp_file) 或者更确定的语义之下,每次都清理临时文件,这样更明确,处理更好一点: 1 2 3 4 5 6 try: ...
1.错误 从软件方面来说,错误是语法或是逻辑上的。错误是语法或是逻辑上的。 语法错误指示软件的结构上有错误,导致不能被解释器解释或编译器无法编译。这些些错误必须在程序执行前纠正。...如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(traceback)终止执行 异常处理 捕捉异常可以使用try/except语句。...Exception 和 BaseException 当我们要捕获一个通用异常时,应该用Exception还是BaseException?我建议你还是看一下 官方文档说明,这两个异常到底有啥区别呢?...请看它们之间的继承关系。 从Exception的层级结构来看,BaseException是最基础的异常类,Exception继承了它。...BaseException除了包含所有的Exception外还包含了SystemExit,KeyboardInterrupt和GeneratorExit三个异常。
领取专属 10元无门槛券
手把手带您无忧上云