查看所有Python相关学习笔记
异常:
异常处理(Exception)
- 你不可能总是对的
- 一个try可以跟多个except
try:
异常检测范围
except:
出现异常后执行的内容
else:
没有异常时执行的内容
finally:
无论是否有异常,都会执行的内容
- 当解释器遇到错误的(无法执行)的代码
- 中断当前代码的执行
- 抛出一个异常
开发者还可以自己定义异常
异常的捕获
try...except...
已知异常(针对具体的错误,指定相应的方法)
try:
b = 4/0
except ZeroDivisionError as b:
print(f'handle ZeroDivisionError:{b}')
except NameError as a:
print(f'NameError:{a}')
# 同时捕获多个异常
try:
pass
except NameError(ZeroDivisionError,):
print('出错了')
未知异常(捕获所有异常)
Exceptionin - 所有异常的父类
try:
b = 4/0
except Exceptionin as b:
print(f'unkown:{b}')
try:
ddd
except:
print('发生异常')
获取具体的异常信息
import traceback
try:
lll
except:
print(f'unkown:\n{traceback.format_exc()}')
无论是否有异常,都要执行某段代码(finally)
try...except...finally...
无论是否有异常都会执行finally的内容
没有异常的情况下要执行的一段代码(else)
try...except...else...finally...
else在所有的except后面,在finally的前面
函数调用栈:
调用关系,一层一层,任意一层都可以进行异常处理
raise将异常抛出到上一层
try ...except...raise
def f3():
try:
print('in f3 - begin')
4/0
print('in f3 - end')
except:
print('异常3')
raise
def f2():
try:
print('in f2 - begin')
f3()
print('in f2 - end')
except:
print('异常2')
def f1():
print('in f1 - begin')
f2()
print('in f1 - end')
f1()
异常的自定义及使用:
def NameTooLongError(Exception):
pass
if len(name) > 10:#使用自定义的异常
raise NameTooLongError
丰富的else语句补充知识
要么怎样,要么不怎样
if...else...
-
干完了能怎样,干不完就别想怎样
while...else...
如果循环内的内容全部执行完了则继续执行else,如果中途break跳出,则不执行else
def showMaxFactor(num):
count = num//2
while count >1:
if num % count == 0:
print('%d最大约数是%d' %(num,count))
break
count -= 1
else:
print('%d是素数' % num)
num = int(input('请输入一个数:'))
showMaxFactor(num)
- 没有问题,那就干吧
try...except...else...finally
try:
int('123')
except ValueError as reason:
print('出错了:'+ str(reason))
else:
print('没有异常')
AssertionError | 断言语句(assert)失败 |
AttributeError | 尝试访问未知的对象属性 |
EOFError | 用户输入文件末尾标志EOF(Ctrl+d) |
FloatingPointError | 浮点计算错误 |
GeneratorExit | generator.close()方法被调用的时候 |
ImportError | 导入模块失败的时候 |
IndexError | 索引超出序列的范围 |
KeyError | 字典中查找一个不存在的关键字 |
KeyboardInterrupt | 用户输入中断键(Ctrl+c) |
MemoryError | 内存溢出(可通过删除对象释放内存) |
NameError | 尝试访问一个不存在的变量 |
NotImplementedError | 尚未实现的方法 |
OSError | 操作系统产生的异常(例如打开一个不存在的文件) |
OverflowError | 数值运算超出最大限制 |
ReferenceError | 弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象 |
RuntimeError | 一般的运行时错误 |
StopIteration | 迭代器没有更多的值 |
SyntaxError | Python的语法错误 |
IndentationError | 缩进错误 |
TabError | Tab和空格混合使用 |
SystemError | Python编译器系统错误 |
SystemExit | Python编译器进程被关闭 |
TypeError | 不同类型间的无效操作 |
UnboundLocalError | 访问一个未初始化的本地变量(NameError的子类) |
UnicodeError | Unicode相关的错误(ValueError的子类) |
UnicodeEncodeError | Unicode编码时的错误(UnicodeError的子类) |
UnicodeDecodeError | Unicode解码时的错误(UnicodeError的子类) |
UnicodeTranslateError | Unicode转换时的错误(UnicodeError的子类) |
ValueError | 传入无效的参数 |
ZeroDivisionError | 除数为零 |