错误与异常
错误通常指的是语法错误,使用错误的python语法,导致程序无法运行
invalid syntax:语法错误
异常:常见的说法为bug
异常通常指的是程序的语法没有问题,但程序运行的过程中可能发生了错误,即程序运行期出现的错误称为异常
异常代码:
try:执行代码
except:异常是执行的代码
else:没有异常时执行的代码
finally:有无异常都会执行的代码
捕获异常不报错
Bug永远存在
只要人编写的程序,就会有bug.我们无法编写出‘完美’的程序。但可以京自己所能的避免bug发生
断言(assert)是一种方式
通过断言,让程序处理可以被处理的情况,则主动抛出错误,同时附上错误信息,方便了解异常发生时的情况。如果遇到不能处理的情况则主动抛出。
使用raise主动抛出异常
示例:
In [1]: x = 10
In [2]: if x > 5:
...: raise Exception(f'Error: {x}')
...:
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
<ipython-input-2-046e8724dea1> in <module>
1 if x > 5:
----> 2 raise Exception(f'Error: {x}')
3
输出报错内容:
Exception: Error: 10
raise 与 try/except配合使用
通过raise将异常向上抛出,由上层的try/except捕获并进行处理。
报错不显示,能处理就不会抛出错误
示例1:In [5]: if x > 5:
...: try:
...: raise Exception('Error')
...: except:
...: pass
...:
不能处理将错误继续往上抛
示例2:
In [6]: if x > 5:
...: try:
...: raise Exception('Error')
...: except:
...: print('xxx')
...: raise
...:
...:
xxx
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
<ipython-input-6-3e253123aab7> in <module>
1 if x > 5:
2 try:
----> 3 raise Exception('Error')
4 except:
5 print('xxx')
Exception: Error
实操learn_bug提取文件总结:
#设置路径
filepaths = ['news.txt','not_exist_file.txt']
#for迭代对象
for fp in filepaths:
#执行代码
try:
f = open(fp,'r', encoding='utf8')
except:
print(f'can not open {fp}')
else:
content = f.read()
print(f'file content: {content}')
finally:
print('Python is easy!!!')
总共出现的错误异常问题:
路径设置问题
文本编码问题,不在于代码本身
最后代码严谨性问题(也就是平常错误语法)