引言
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 传入一个调用者不期望的值,即使值的类型是正确的
更多异常
ArithmeticErrorAssertionErrorAttributeErrorBaseExceptionBufferErrorBytesWarningDeprecationWarningEnvironmentErrorEOFErrorExceptionFloatingPointErrorFutureWarningGeneratorExitImportErrorImportWarningIndentationErrorIndexErrorIOErrorKeyboardInterruptKeyErrorLookupErrorMemoryErrorNameErrorNotImplementedErrorOSErrorOverflowErrorPendingDeprecationWarningReferenceErrorRuntimeErrorRuntimeWarningStandardErrorStopIterationSyntaxErrorSyntaxWarningSystemErrorSystemExitTabErrorTypeErrorUnboundLocalErrorUnicodeDecodeErrorUnicodeEncodeErrorUnicodeErrorUnicodeTranslateErrorUnicodeWarningUserWarningValueErrorWarningZeroDivisionError
异常处理
一般情况下,如果我们对即将运行的代码有可能出现异常的担忧,可以使用异常处理来运行我们代码,但是在捕获异常时最好能够具体写清楚异常的类型。如果可能出现多种异常,可以使用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: # 主代码块 passexcept KeyError as e: # 异常时,执行该块 passelse: # 主代码正常执行完,执行该块,如出现异常,不执行该块 passfinally: # 无论异常与否,最终执行该块 pass
主动触发异常
try: raise Exception('错误了。。。')except Exception as e: print(e)
自定义异常
class WusirException(Exception): def __init__(self, msg): self.message = msgtry: raise WusirException('这是我自定义的异常')except WusirException as e: print(e)