Python异常处理
引言
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)
Fake it,till you make it