🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 引言   python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。 * 异常处理 * 断言(Assertions) ## 基本语法 ~~~ try: 可能发生异常的代码 except 异常错误的类型 as e: #e表示用来接受异常错误原因 pass         #可以在此处打印提示人们错误原因 ~~~ ## 异常种类 ### 常见异常 ~~~ AttributeError 试图访问一个对象没有的属性 IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包;基本上是路径问题或名称错误 IndentationError 语法错误的子类,缩进错误 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError 使用一个还未被赋予对象的变量 SyntaxError Python语法错误 TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它 ValueError 传入一个调用者不期望的值,即使值的类型是正确的 ~~~ ### 更多异常 ``` ArithmeticError AssertionError AttributeError BaseException BufferError BytesWarning DeprecationWarning EnvironmentError EOFError Exception FloatingPointError FutureWarning GeneratorExit ImportError ImportWarning IndentationError IndexError IOError KeyboardInterrupt KeyError LookupError MemoryError NameError NotImplementedError OSError OverflowError PendingDeprecationWarning ReferenceError RuntimeError RuntimeWarning StandardError StopIteration SyntaxError SyntaxWarning SystemError SystemExit TabError TypeError UnboundLocalError UnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateError UnicodeWarning UserWarning ValueError Warning ZeroDivisionError ``` ## 异常处理   一般情况下,如果我们对即将运行的代码有可能出现异常的担忧,可以使用异常处理来运行我们代码,但是在捕获异常时最好能够具体写清楚异常的类型。如果可能出现多种异常,可以使用if判断,也可以把异常类型放在一起写成元祖的形式(但是这样的话没法具体指导是哪一种异常报错),也可以将Exception这个万能异常放在判断的最后,以防出现了我们没有捕获到的异常。 ~~~ s1 = 'hello' try: int(s1) except IndexError as e: print('出现了以下错误', e) except KeyError as e: print('出现了以下错误', e) except ValueError as e: print('出现了以下错误', e) except Exception as e: print('出现了以下错误', e) ~~~ ~~~ s1 = 'hello' try: int(s1) except (IndexError,ValueError,KeyError) as e: print('出现了以下错误', e) except Exception as e: print('出现了以下错误', e) ~~~ ### 其他异常结构 ~~~ try: # 主代码块 pass except KeyError as e: # 异常时,执行该块 pass else: # 主代码正常执行完,执行该块,如出现异常,不执行该块 pass finally: # 无论异常与否,最终执行该块 pass ~~~ ### 主动触发异常 ~~~ try: raise Exception('错误了。。。') except Exception as e: print(e) ~~~ ### 自定义异常 ~~~ class WusirException(Exception): def __init__(self, msg): self.message = msg try: raise WusirException('这是我自定义的异常') except WusirException as e: print(e) ~~~