Python异常处理语句 try...except...else...

前面已经讲解了try...except...结构(https://blog.csdn.net/weixin_50486192/article/details/123095521),现在在try...except...结构的基础上,再添加一个else代码块,形成try...except...else...结构,即

try:
    可能产生异常的代码块1
except [(Error1, Error2, ...) [as e]]:
    处理异常的代码块2
except [(Error3, Error4, ...) [as e]]:
    处理异常的代码块3
except [(Exception) [as e]]:
    处理其它异常的代码块n
else:
    代码块1无异常时执行的代码块

当try中的代码块1出现异常,系统就会自动生成相应的异常类型,然后根据异常类型Error进入相应的except分支进行异常处理;如果try代码块没有出现任何异常时,就会直接跳到else的代码块执行。
所以,else的代码块,只有当try的代码块没有出现异常时才会显现出来,否则else中的代码块不会执行。

例1:try中没有出现异常

try:
    a = 10
    b = 2
    c = a / b
except (ValueError, TypeError) as e:     # 该except分支可以同时捕获并处理 ValueError, TypeError这2种类型的异常
    print("ValueError or TypeError:", e)
except (ZeroDivisionError) as e:        # 该except分支可以捕获并处理 ZeroDivisionError 这种类型的异常
    print('ZeroDivisionError:', e)
except(Exception) as e:                 # 未指定具体要捕获的异常类型, 意味着可捕获所有类型的异常,
    print("other exceptions:", e)
else:
    print("result:", c)                 # try 中没有出现异常,会执行
print("continue...")

执行结果:
result: 5.0
continue...

例2:try中出现异常

try:
    a = 10
    b = 0
    c = a / b                           # b作为被除数不能为0,将出现 ZeroDivisionError 的异常
except (ValueError, TypeError) as e:    # 该except分支可以同时捕获并处理 ValueError, TypeError这2种类型的异常
    print("ValueError or TypeError:", e)
except (ZeroDivisionError) as e:        # 该except分支可以捕获并处理 ZeroDivisionError 这种类型的异常
    print('ZeroDivisionError:', e)
except(Exception) as e:                 # 未指定具体要捕获的异常类型, 意味着可捕获所有类型的异常,
    print("other exceptions:", e)
else:
    print("result:", c)                 # try 中出现了异常,不会执行
print("continue...")

执行结果:
ZeroDivisionError: division by zero
continue...

注意:
try中一般不使用return语句,如果try中含有return语句,可能会阻碍到except或else的执行。
例:

def test():
    try:
        print(1)
        return 1
        # raise ValueError()    # 加上这一句后会阻碍except的执行
    except:
        print(2)
        return 2
    else:
        print(3)
        return 3
print('continue...')
print(test())

执行结果:
continue...
1
1

从执行结果可以看出,尽管try中没有出现异常,但是含有return语句,所以在执行else代码块之前就已经返回了,因而执行不到else部分。
 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: try...except...是Python中用于异常处理语句。当程序出现异常时,会抛出一个异常对象,如果没有进行异常处理,程序会终止运行。而使用try...except...语句可以捕获异常并进行处理,使程序可以继续运行下去。 try语句块中包含可能会出现异常的代码,如果出现异常,就会跳转到except语句块中进行处理。except语句块中可以指定要捕获的异常类型,如果没有指定,就会捕获所有类型的异常。 例如: try: a = 10 / except ZeroDivisionError: print("除数不能为") 在上面的代码中,try语句块中进行了除法运算,由于除数为,会抛出ZeroDivisionError异常。然后程序跳转到except语句块中进行处理,输出“除数不能为”。 除了指定异常类型,还可以使用多个except语句块来处理不同类型的异常,或者使用一个except语句块来捕获所有类型的异常,并在其中进行不同的处理。 例如: try: a = int(input("请输入一个整数:")) b = 10 / a except ValueError: print("输入的不是整数") except ZeroDivisionError: print("除数不能为") except: print("其他异常") else: print("结果为:", b) 在上面的代码中,try语句块中先进行了输入操作,如果输入的不是整数会抛出ValueError异常,如果除数为会抛出ZeroDivisionError异常。如果出现其他类型的异常,就会跳转到最后一个except语句块中进行处理。如果没有出现异常,就会执行else语句块中的代码,输出结果。 ### 回答2: Python是一门相对容易入门的编程语言,但在实际应用中难免会遇到各种错误。这时,我们就需要使用Python异常处理机制。其中,tryexcept…语句就是Python中最常用的异常处理方式之一。 在Python中,tryexcept…语句用于捕获并处理异常。语法如下: ``` try: #尝试执行的代码 except ExceptionType: #遇到ExceptionType类型的错误时执行的代码 else: #没有发生任何错误时执行的代码 finally: #不管有没有发生错误,都会执行的代码 ``` 其中,try代码块中的代码会尝试执行。如果执行过程中发生了异常,Python会自动抛出一个异常对象。这时,如果有对应类型的except代码块,Python就会转而执行它,而不会让程序直接崩溃。 举个例子,我们将两个数字相除: ``` a = 1 b = 0 try: c = a / b except ZeroDivisionError: print("被除数为0") ``` 上述代码中,我们将b赋值为0,这明显是不符合除法的要求的,因此Python会抛出一个ZeroDivisionError类型的异常。在except代码块中,我们通过打印一句话来提示用户被除数为0,从而避免了程序崩溃。 除了使用except语句来捕获和处理异常外,还可以使用else语句来指定在代码没发生异常时要执行的代码,使用finally语句来指定不管有没有异常都要执行的代码块。这些语句的使用可以更好地帮助我们完善代码的健壮性。 总之,tryexcept…语句Python中非常重要的异常处理方式。在实际开发中,我们需要灵活运用它来处理各种异常情况,从而保证程序的稳定性与可靠性。 ### 回答3: Python是一种面向对象的高级编程语言,其提供了异常处理机制,可以让程序在出现错误时不会终止运行,而是向用户提示并进行处理。这种异常处理机制的语法为try...except...。 try...except...的基本语法格式如下: ``` try: # 可能会出现异常的代码块 except 异常类型1: # 处理异常1的代码块 except 异常类型2: # 处理异常2的代码块 ... except Exception: # 处理其他未预料到的异常的代码块 else: # 没有出现异常时执行的代码块 finally: # 无论异常是否出现都会被执行的代码块 ``` 当try语句中的代码块出现异常时,会跳转到出现异常的except语句中进行处理,如果出现异常的类型没有在except语句中被捕获到,那么就会抛出异常,导致程序异常终止。因此,每一个except都应该指定一个合理的异常类型,以便对不同类型的异常进行特定的处理,并且最后的except Exception可以处理所有未预料到的异常。 在except语句块中也可以使用关键字`raise`重新抛出异常,以便让上层代码进行处理。同时,在try...except...语句中,可以通过else语句块来指定在没有发生异常时执行的代码,例如可以在else语句块中打印“没有发现异常”的提示信息。同时,无论try...except...语句是否发生异常,都会执行finally语句块中的代码,这常常用于释放资源等操作。 除了常用的Exception类外,Python还提供了一些内置的异常类,如IndexError、TypeError等,可以用来处理特定的异常。此外,用户也可以自定义异常类型,以便更精确的处理异常。 总的来说,try...except...语句Python中非常重要和常用的一个功能,能够帮助程序员更好的控制程序运行过程中的异常情况,从而更好的保证程序的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值