模块整体逻辑
try:
# 这里写代码块
pass
except Exception as e:
# try中的内容出错,会自动执行当前块的内容
pass
else:
pass
finally:
pass
上面的代码是一个固定的写法,其中,Exception是一个类,如果try中的代码出错,Exception对象会把错误信息进行封装。
错误的信息有很多种,比如TypeError等等,Exception中可以捕获所有的错误信息。
示例如下:
try:
n = int(input('请输入一个数:'))
except Exception as e:
print('这个不是整型,请重新输入')
else:
print('恭喜你,输入了一个数字')
finally:
print('这次的执行结束了')
# 输出:
# 请输入一个数:1
# 恭喜你,输入了一个数字
# 这次的执行结束了
# 请输入一个数:nbv
# 这个不是整型,请重新输入
# 这次的执行结束了
# 请输入一个数:
创建的异常种类如下:
名称 | 解释 |
AttributeError | 访问一个对象没有属性 |
SyntaxError | 代码不能编译,语法错误 |
TypeError | 传入对象类型于要求的不符合 |
ImportError | 无法导入模块或包 |
IndentationError | 语法错误 |
IndexError | 索引错误 |
自定义一个异常种类
自定义需要用到一个函数,叫 raise() ,它的功能是主动去触发错误。上面提到了Exception是一个类,那我我们就可以通过重写这个类,来实现定制异常。
class customError(Exception):
def __init__(self,name): # 这里就是给类中加些内容,没意义
self.name = name
try:
raise customError('报错了') # 主动去触发错误
except Exception as e:
print(e)
# 输出:报错了
assert:断言
assert 1 == 1
print('hello') # 输出:hello
断言的意思是,如果满足assert后面所跟的条件,只会执行它下面的代码,如果不满足,会直接抛出 AssertionError(断言异常)。
类继承树
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- StopAsyncIteration
+-- ArithmeticError
| +-- FloatingPointError
| +-- OverflowError
| +-- ZeroDivisionError
+-- AssertionError
+-- AttributeError
+-- BufferError
+-- EOFError
+-- ImportError
| +-- ModuleNotFoundError
+-- LookupError
| +-- IndexError
| +-- KeyError
+-- MemoryError
+-- NameError
| +-- UnboundLocalError
+-- OSError
| +-- BlockingIOError
| +-- ChildProcessError
| +-- ConnectionError
| | +-- BrokenPipeError
| | +-- ConnectionAbortedError
| | +-- ConnectionRefusedError
| | +-- ConnectionResetError
| +-- FileExistsError
| +-- FileNotFoundError
| +-- InterruptedError
| +-- IsADirectoryError
| +-- NotADirectoryError
| +-- PermissionError
| +-- ProcessLookupError
| +-- TimeoutError
+-- ReferenceError
+-- RuntimeError
| +-- NotImplementedError
| +-- RecursionError
+-- SyntaxError
| +-- IndentationError
| +-- TabError
+-- SystemError
+-- TypeError
+-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning
+-- ResourceWarning