前言
首先我们要知道,我们为什么要使用try except else finally这些语句。
python有自己的异常错误触发系统,如果在执行代码的时候,出现了错误,则自动的就会触发应有的错误。
但是有时候,我们并不想因为一些错误的出现,导致剩下的代码不能执行了,只是我们不想看到的结果,所以使用try except结构语句。
把可能会出现错误的代码放在try中,一旦出现错误,就会去匹配except中对应的错误,然后执行对应的擦操作。try except结构体执行完之后,接着执行结构体下面的代码,并不会因为出错而导致整个代码不执行了。
如果我们不使用try except结构体,一旦执行的时候出行错误,就会报错,traceback,代码就不执行了。
如果想自己主动的引起错误,就使用raise,引发错误之后,后面的代码就不在执行了。
整体的结论
1/try...except...else
<1> 先执行try语句,如果发生错误,则执行except语句,不执行else语句
<2> 先执行try语句,如果没有发生错误,不执行except语句,执行else语句
<3> 总结:只有try语句没有出行错误异常的情况下,才会执行else语句
2/try...except...finally
<1> 先执行try语句,如果发生错误,则执行except语句,然后执行finally语句
<2> 先执行try语句,如果没有发生错误,不执行except语句,执行finally语句
<3> 总结:无论try语句是否出现错误,最后都会执行finally语句
切记:
如果有finally语句,那么finally语句是一定会被执行的,
即使try中有return语句,即使except中有return语句, 即使else中有ruturn语句,
总之,不管怎样,finally语句是一定会被执行的。
我们使用try except就是为了避免在出现错误的时候,代码停止执行。
我们有时候并不希望一旦出现错误就导致所有的代码都停止执行。
所有使用try cecept结构。
把可能会出现错误的代码放在try语句中,一旦在执行的时候出行错误,就是去匹配except.
如果匹配上了,那么except中该怎么处理就怎么处理,然后继续执行try except之外的代码。
在java中,是try catch finally

finally语句是可选的。
使用try将可能出现异常的代码包装起来 ,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,
根据此对象的类型,去catch中进行匹配。
一旦try中出现的异常对象匹配到某一个catch,就进入catch中进行异常的处理。
一旦处理完成,就会跳出当前的try-catch结构(在没有写finally的情况下),然后继续执行后面的代码。
在try语句中定义的变量,只能在try中使用,不能在catch和finally中使用。
(如果是python try except else finally,try中定义的变量,只能在try和else语句中使用,
不能在except和finally语句中使用)
参考网址
https://blog.csdn.net/c_xiazai12345/article/details/119534895
前言
异常:代码在运行过程中出现的错误,被称为异常。(不包括语法错误)
在python中,一个py文件中的代码,正常情况下,是按照顺序执行的,但是当遇到异常时,会停止程序的运行
如果不想让程序停止并且继续运行,那么就需要使用try except来捕捉异常,保证代码能够顺畅执行。
直接上干货
下面举一个简单的例子来帮助理解try…except语句的特点:
我们有下面一段代码:
one_num = int(input("请输入一个数字:"))
print("输入的数字是:{}".format(one_num))
print("继续执行代码")

如果我们使用try except来处理的话
try:
one_num = int(input("请输入一个数字:"))
print("输入的数字是:{}".format(one_num))
except:
print("当try里面的代码出现异常时,执行except中的代码")
print("继续执行代码")
所以在使用try…except处理后,当输入的内容不是数字时,会执行except中的语句,并继续往下执行代码:

当输入内容为数字时,执行完try语句中的代码后,跳过except中的代码,继续往下执行:

通过上面的实战,我们得出结论:
所以,通过以上的例子可以看出,try…except语句的特点是:
1.当try语句块中的代码出现异常时,不会中断程序的执行;
2.当try语句块中的代码出现异常时,不再继续往下执行try语句块中剩下的代码,而是跳转到except语句块执行代码;
3.当try语句块中的代码无异常时,执行完try语句块中的代码后,会跳过except语句块,继续往下执行程序。
当我们输入的是非数字时,one_num = int(input(“请输入一个数字:”))这一行代码会出现值异常,
那么此时,try语句块后面的语句不会继续执行,而是跳转到except ValueError语句块中继续执行,
当except ValueError代码块中的代码执行完毕后,会跳过except ZeroDivisionError,继续往后执行:

当我们输入的是数字0时,则在执行num = 1/one_num会出现除数为0的错误,此时try语句块后面的语句不会继续执行,而是跳转到except ZeroDivisionError语句块中继续执行:

所以,通过上面的代码例子可以看出,当有多个except语句时,执行其中一个except之后,其他的except就不会再被执行了。
但是通过上面的例子也可以看出,如果有很多种异常时,则需要写很多个except语句,这会使代码看起来冗长、可读性差。所以,在python中,往往会在同一个except中,使用多个异常:
try:
one_num = int(input("请输入一个数字:"))
print("输入的数字是:{}".format(one_num))
num = 1/one_num
print("try中代码结束")
except (ValueError, ZeroDivisionError):
print("当try里面的代码出现值异常、或者除数为0的异常时,执行此代码")
print("继续执行代码")
但是,有时候,有一些无法预估的错误信息,如果我们使用具体的异常方法捕获不到,还是会导致代码中断,比如:
try:
one_num = int(input("请输入一个数字:"))
print("输入的数字是:{}".format(one_num))
num = 1/one_num
print(num1)
print("try中代码结束")
except (ValueError, ZeroDivisionError):
print("当try里面的代码出现值异常、或者除数为0的异常时,执行此代码")
print("继续执行代码")
当代码执行到print(num1) 这一行时,有异常,但是try…except语句捕捉不到,导致程序报错,不再继续执
行:
这时候,可以使用Exception,来捕获所有的异常。
try:
one_num = int(input("请输入一个数字:"))
print("输入的数字是:{}".format(one_num))
num = 1/one_num
print(num1)
print("try中代码结束")
except (ValueError, ZeroDivisionError):
print("当try里面的代码出现值异常、或者除数为0的异常时,执行此代码")
except Exception:
print("所有异常信息都可以捕捉到!!!")
print("继续执行代码")
可以这么说,当你使用Exception时,可以不用写其他的except语句。
比如上面那段代码,我们可以直接把except (ValueError, ZeroDivisionError)这一段代码给注释掉,然后输入非数字、0等,均可以被except Exception捕获.
另外,当我们捕获到异常时,为了更清晰的了解异常信息,往往会通过as将异常信息传给一个对象:
try:
one_num = int(input("请输入一个数字:"))
print("输入的数字是:{}".format(one_num))
num = 1/one_num
print(num1)
print("try中代码结束")
except Exception as err:
print("所有异常信息都可以捕捉到!!!")
print("捕获到的异常信息是:{}".format(err))
print("继续执行代码")
另外,在try…except语句中,还有个可选语句else、finally。
else语句的作用是:当try的代码块中,没有出现异常时,执行else。出现异常时,不执行else。
比如下面这段代码中,当输入1时,try语句块不会出现异常;当输入0时,则会出现异常。
finally语句的作用是:无论try…except是否出现异常,都会执行finally语句。
我们还是通过下面一段代码去执行验证。下面这段代码中,当输入1时,try语句块不会出现异常;当输入0时,则会出现异常


由此可以看出,无论前面代码是否会抛出异常,最终,否会执行finally语句中的代码。