本文将介绍有关异常和异常捕捉的try-except有关语句的基本使用。其中异常捕捉有try-except语句,try-except Exception as e语句,try-except()语句。
这个就是平时我们运行程序时会报错,有各种出错的形式,如ZeroDivisionError(除零错误),NameError(未定义错误),TypeError: can only concatenate?str?(not?"int")?to?str(str与int)不能相加的错误,等等。例如下面就是没有找到这个文件。?
基本语法格式,我将用下面这个例子进行讲解:
# try-except语句
try:
# 打开E盘名字叫mill的文件(这在我的E盘原来是没有的)
f = open('E:/mill.txt','r',encoding='UTF-8')
print("哈哈")
except:
f = open('E:/mill.txt', 'w', encoding='UTF-8')
print("xixi")
运行结果为:
分析结果可以看出try下的语句没有运行,而except的语句运行了,我们就可以发现except已经把他捕捉到了。并且我已经使用了'w'模式解决了这个错误。此时我的E盘会生成这个叫mill的文件。
首先如果是只需要查某一个的特定的错误,就可以使用这种形式:
try:
# 我的E盘没有hello这个文件
# a = x + y
f = open("E:/hello.txt","r",encoding="UTF-8")
except NameError as e:
print("有变量没有被定义")
这个代码是用来捕捉NameError的但是由于上文没有没有被定义的未知变量,并且由于我的E盘没有hello这个文件因此他就会报出‘没有找到这个文件’这个错误:
而当我讲 a=x+y这个注释放开后,由于try当中有没有被定义的错误,所以它就不会报错:
这样它就捕捉到了变量没有被定义的错误。
如果需要捕捉多个类型的错误即演示如下:
try:
# 我的E盘没有hello这个文件
a = x + y
f = open("E:/hello.txt","r",encoding="UTF-8")
except (NameError,NotADirectoryError):
print("有变量没有被定义或没有文件")
这里解释思路与上文一致,就不再赘述了。
这个也是捕获全部错误的一个语句,它的作用与try-except的使用效果一致,但是我们习惯性使用这个来捕捉全部的错误,代码演示如下:
try:
# 我的E盘没有hello这个文件
a = x + y
f = open("E:/hello.txt","r",encoding="UTF-8")
except Exception as e:
print("有变量没有被定义或没有文件")
这时他就会执行except后语句。
如果再后面加上finally,则不管try后面是否有符合要求的错吴,fianlly后面的语句都会运行,即:
# try-except语句
try:
# 打开E盘名字叫mill的文件(这在我的E盘原来是没有的)
f = open('E:/mill.txt','r',encoding='UTF-8')
print("哈哈")
except:
f = open('E:/mill.txt', 'w', encoding='UTF-8')
print("xixi")
finally:
print("有没有这个文件我都会运行")
结果如下:
由于我前面已经运行过一次try-except所以E盘已经有了mill文件,因此他会执行出结果为
哈哈
有没有这个文件我都会运行