学习主题:异常处理
学习日期:2020-02-09
Python 版本:3.7.4
人非圣贤孰能无过。
异常就是错误,可以是程序员操作或者是用户的异常操作导致结果错误。
我们不能强求用户通过专业的角度与习惯去使用。
所以我们在程序中考虑到由于误操作引起的错误,以提高程序的适用性。
完整版请点击https://fishc.com.cn/thread-45814-1-1.html
举几个例子吧
>>> a
Traceback (most recent call last):
File "" , line 1, in <module>
a
NameError: name 'a' is not defined
#这里提示是NameError,查看上表原因是,
#尝试访问一个不存在的变量
>>> for ii in range(2)
SyntaxError: invalid syntax
#这里提示是SyntaxError,查看上表原因是语法错误
#仔细查代码,原因是for最后没有加冒号‘:’。
第 33讲 怎么处理异常
file=open('alexma.txt','r')
file.read()
file.close()
提示错误,因为这个文件压根就不存在。
所以提示FileNotFoundError.
怎么避免呢,来使用 try except语句
try:
file=open('alexma.txt','r')
file.read()
file.close()
except OSError:
print('文件出错!')
try:
file=open('alexma.txt','r')
file.read()
file.close()
except OSError as ErrorReason:
print('文件出错!,原因是:'+str(ErrorReason))
多种错误类型呢,怎么添加呢。
try:
a=1+b
file=open('alexma.txt','r')
file.read()
file.close()
except OSError as ErrorReason:
print('文件出错!,原因是:'+str(ErrorReason))
except NameError as ErrorReason:
print('命名错误,,原因是:'+str(ErrorReason))
try except语句一旦报错,那么程序就不会再往下一步执行了。
怎么避免呢,还可以使用try finally语句
try finally用法
try:
检测范围
except Exception [as ErrorReason]:
出现异常后的处理代码,这里一般是提醒报错的代码
finally :
无论如何都会被执行的代码
举个实例吧
try:
file=open(r'C:\Users\SNIPER\Desktop\mydemo、alexma.txt','w')
file.write('I am alexma')
b=b+1
file.close()
except OSError as ErrorReason:
print('文件出错!,原因是:'+str(ErrorReason))
except NameError as ErrorReason:
print('命名错误,,原因是:'+str(ErrorReason))
如果不加finally,运行如下:
结果如上面两个截图,是提醒没有定义命名这个b,程序终止了,所以file.close()这行代码也不执行,
不执行这一步,内容就保存不到文件里,所以 文件是空的。
这个文件为空的问题在实际编程中经常会出现,加上finally就ok
try:
file=open(r'C:\Users\SNIPER\Desktop\mydemo\alexma.txt','w')
file.write('I am alexma')
b=b+1
except OSError as ErrorReason:
print('文件出错!,原因是:'+str(ErrorReason))
except NameError as ErrorReason:
print('命名错误,,原因是:'+str(ErrorReason))
finally:
file.close()
raise语句
>>> a=1
>>> b=0
>>> a/b
Traceback (most recent call last):
File "" , line 1, in <module>
a/b
ZeroDivisionError: division by zero
>>> raise ZeroDivisionError('除数不能为0')
Traceback (most recent call last):
File "" , line 1, in <module>
raise ZeroDivisionError('错啦,记住除数不能为0')
ZeroDivisionError: 除数不能为0
>>>