达永编程网

程序员技术分享与交流平台

要想代码写的好,try except语句少不了

在开发程序的时候,总会有各种问题难以预料,比如:文件未找到,文件格式不对,类型错误等等,经常会出现 "代码刚才还好好的","代码在我电脑上没有问题啊..." 等等问题,程序经常会遇到意想不到的错误。还好,python提供了一种机制,可以捕获这类错误并继续运行而不是直接报错或崩溃,这种机制就是异常处理



Python中的try语句用于异常处理,确保程序在遇到错误时能够继续运行而不是崩溃。

我们可以看看一些经典的内置模块或第三方模块的源码,毫无疑问,几乎都在使用try语句,大佬之所以是大佬,是因为他们把可能会出现的代码问题都考虑到了,并提前对异常做处理。

基本语法和用法

try:
    # 可能会引发异常的代码
except Exception1:
    # 当捕获到 Exception1 时执行的代码
except Exception2:
    # 当捕获到 Exception2 时执行的代码
else:
    # 如果 try 块没有引发异常,则执行此处代码
finally:
    # 无论是否引发异常,都会执行此处代码

异常处理机制

  1. 捕获特定异常:可以使用except子句来捕获特定类型的异常,例如ZeroDivisionError或ValueError。如果try块中的代码引发了这些异常,相应的except子句将被执行。
  2. 捕获所有异常:可以使用一个不带参数的except子句来捕获所有类型的异常。

try ... except

一个 try 语句可能有多个 except 子句,以指定不同异常的处理程序。 最多会执行一个处理程序。 处理程序只处理相应的 try 子句中发生的异常,而不处理同一 try 语句内其他处理程序中的异常

有些时候,我们无法完全预测产生异常的可能类型,而且对于不同的异常处理类型我们的处理逻辑都是一样的,这种情况下,可直接采用Exception进行处理Exception也叫万能异常,即可以捕捉到由逻辑错误产生的任何异常)

a=[1,2,3,0]
try:
    for i in a:
        print(6/i)
except Excetion as e:
    print(e)

try...except...else

try ... except 语句有一个可选的 else 子句,在使用时必须放在所有的 except 子句后面。对于在try 子句不引发异常时必须执行的代码

使用 else 子句比向 try 子句添加额外的代码要好,因为它避免了意外捕获由 try ... except 语句保护的代码未引发的异常。

try:
    l=[1,2,3]
    print(l[2])
except Exception as e:
    print(e)
else:
    print("没有异常")
#输出:3
            没有异常

raise语句抛出异常

raise 语句允许程序员强制发生指定的异常

try:
	x=int(input('请输入分子:'))
	y=int(input('请输入分母:'))
	if y==0:
  	raise 'ZeroDivisionError'
except ZeroDivisionError as e:
    print('引发异常:', repr(e))
#输出
   输入一个被除数 x:6
   输入一个被除数 y:0
    引发异常: ZeroDivisionError('division by zero')

finally语句

如果存在 finally 子句,则 finally 子句将作为try语句结束前的最后一项任务被执行。 finally 子句不论 try 语句是否产生了异常都会被执行,

注意事项:

  • 如果在执行try子句期间发生了异常,该异常可由一个 except 子句进行处理。 如果异常没有被某个 except 子句所处理,则该异常会在 finally 子句执行之后被重新引发。
  • 异常也可能在 except 或 else 子句执行期间发生。 同样地,该异常会在 finally 子句执行之后被重新引发。
  • 如果在执行 try 语句时遇到一个 break, continue 或 return 语句,则 finally子句将在执行break, continue 或 return语句之前被执行。
  • 如果 finally 子句中包含一个 return 语句,则返回值将来自 finally 子句的某个 return 语句的返回值,而非来自 try 子句的 return 语句的返回值。
while True:
    try:
        x=1
        y=5 
        print(x/y)
    except Exception as e:
        print(e)
    else:
        print('try 没有异常则执行的代码')
        break
    finally:
        print('无论如何要执行的')    #即使有break跳出循环,但是在跳出之前执行了

执行结果
1.0
try 没有异常则执行的代码
无论如何要执行的
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言