异常处理try-except

异常

Python使用被称为异常的特殊对象来管理程序的执行期间发生的错误。每当发生让Python不知所措时,它都会创建一个异常对象。

使用try-except时即便出现异常,程序也能继续运行。

try-except语法如下:
try: 正常的操作 ...................... except(): 发生异常,执行这块代码 ...................... else: 如果没有异常执行这块代码


简单举个例子
1 a=3
2 b=0
3 a/b
4 a+b
--------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-57-93411800c26a> in <module>
      1 a=3
      2 b=0
----> 3 a/b
      4 a+b

ZeroDivisionError: division by zero

从上面的程序我们知道因a/b异常导致程序没有继续下面a+b的运算,我们可以写个简单的try-except的语句避免这种现象。
1 a=3 
2 b=0
3 try:#此代码块写出可能引发错我的代码
4     a/b
5 except(ZeroDivisionError):#可以用()写出一个或多个错误类型,也可不写
6     print("除数不能为0")
7 a+b       
除数不能为0
3


举个try-except-else例子
1 while True:
2     first=input("first number:")
3     if first=="Y":
4         break
5     second=input("second number:")
6     if  second=="E":
7         break
8     YE=int(first)/int(second)#input输出的是str,需要转换成数值类型。
9     print(YE)
first number:1
second number:2
0.5
first number:2
second number:3
0.6666666666666666
first number:1
second number:0

---------------------------------------------------------------------------

ZeroDivisionError:

由上可知出现了除数为0的错误导致程序终止,哪里引发的异常我们就针对这段代码块写个try-except-else的程序
 1 while True:
 2     first=input("first number:")
 3     if first=="Y":
 4         break
 5     second=input("second number:")
 6     if  second=="E":
 7         break
 8     try:#因为YE可能引起异常,在此写try
 9         YE=int(first)/int(second)#input输出的是str,需要转换成数值类型。
10     except:#可省略错误类型
11         print("除数不能为0")
12     else:#没有错误的话继续执行下面的程序
13         print(YE)
first number:1
second number:2
0.5
first number:1
second number:3
0.3333333333333333
first number:1
second number:0
除数不能为0
first number:Y

我们加了一个try-except-else即使出现除数为0的情况程序一直继续运行,直到first=="Y"结束运行


try-finally 语句

try-finally 语句无论是否发生异常都将执行最后的代码。

1 a=3 
2 b=0
3 try:#此代码块写出可能引发错我的代码
4     a/b
5 finally:
6     print(2+3)
5
 
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-76-e428db7b9f9f> in <module>
      2 b=0
      3 try:#此代码块写出可能引发错我的代码
----> 4     a/b
      5 finally:
      6     print(2+3)

ZeroDivisionError: division by zero

虽然上面的程序报错了,但依旧执行了2+3。
原文地址:https://www.cnblogs.com/ye20190812/p/13386086.html