Python异常捕获和处理语句 try-except-else-finally

发布时间:2024年01月06日

目录

try-except-else-finally语句

1. 基本用法

2. 多个异常处理

3. 处理所有其他异常

4. 多个except子句

5. 使用else子句

6. 使用finally子句

7. 使用as关键字

实例

例1

例2

例3

?例4

?例5

?例6

?例7

例8

?结论


try-except-finally语句

在Python中,try-except-finally语句块主要用于处理异常(错误),它有多种用法来增强代码的健壮性和可读性。try语句通常与except、else和finally子句一起使用。

下面是try语句的一些常见用法:

1. 基本用法

尝试执行一段代码,如果发生异常,则跳转到指定的异常处理代码。

try: ?
? ? # 尝试执行的代码块 ?
except ExceptionType: ?
? ? # 如果在try代码块中引发了'ExceptionType'异常,则执行此代码块

2. 多个异常处理

try: ?
? ? # 尝试执行的代码块 ?
except (ExceptionType1, ExceptionType2): ?
? ? # 如果在try代码块中引发了'ExceptionType1'或'ExceptionType2'异常,则执行此代码块

3. 处理所有其他异常

try: ?
? ? # 尝试执行的代码块 ?
except: ?
? ? # 如果在try代码块中引发了任何异常,则执行此代码块

4. 多个except子句

可以为每个异常类型编写一个单独的except子句。这样可以使代码更清晰,易于阅读和维护。

try: ?
? ? # 尝试执行的代码块 ?
except ExceptionType1: ?
? ? # 如果在try代码块中引发了'ExceptionType1'异常,则执行此代码块 ?
except ExceptionType2: ?
? ? # 如果在try代码块中引发了'ExceptionType2'异常,则执行此代码块

5. 使用else子句

如果try代码块成功执行,没有引发任何异常,则执行else子句中的代码。

try: ?
? ? # 尝试执行的代码块 ?
except ExceptionType: ?
? ? # 如果在try代码块中引发了'ExceptionType'异常,则执行此代码块 ?
else: ?
? ? # 如果try代码块成功执行,则执行此代码块

6. 使用finally子句

无论是否引发异常,finally子句中的代码都会被执行。通常用于资源的清理操作。

try: ?
? ? # 尝试执行的代码块 ?
except ExceptionType: ?
? ? # 如果在try代码块中引发了'ExceptionType'异常,则执行此代码块 ?
finally: ?
? ? # 不论是否引发异常,都将执行此代码块

7. 使用as关键字

try-except as-else-finally

try:
? ? # 尝试执行的代码
except ExceptionType as e:
? ? # 发生指定类型的异常时执行的代码,e为异常对象
else:
? ? # 没有发生异常时执行的代码
finally:
? ? # 无论是否发生异常,都会执行的代码


实例

多看几个实例,轻松学会try语句:

例1

try:
? ? # 尝试执行可能抛出异常的代码
? ? f = open('filename.txt')
? ? content = f.read()
except IOError as e:
? ? # 当发生IOError异常时,执行此代码块
? ? print(f"无法打开文件:{e}")
finally:
? ? # 不论是否发生异常,都会执行此代码块
? ? if 'f' in locals():
? ? ? ? f.close()

例2

try:
? ? # 尝试执行代码
? ? value = 1 / 0
except (ZeroDivisionError, TypeError) as e:
? ? # 可以同时处理多种类型的异常
? ? print(f"发生了一个错误:{type(e).__name__} - {e}")

例3

try:
? ? # 多个except子句可以按顺序捕获不同类型的异常
? ? raise ValueError("A specific error")
except ValueError as ve:
? ? print("捕获到一个ValueError:", ve)
except Exception as e:
? ? # 使用Exception作为最后的兜底,捕获所有未被前面except子句捕获的异常
? ? print("捕获到一个通用异常:", e)

?例4

try:
? ? # 如果try块内的代码没有引发任何异常,则执行else子句
? ? safe_operation()
except SomeException:
? ? handle_exception()
else:
? ? # 此处的代码仅在try块成功执行且未引发异常时运行
? ? everything_went_fine()

?例5

try:
? ? risky_operation()
finally:
? ? # 不管try块内是否发生异常,finally中的代码总会被执行
? ? clean_up_resources()

?例6

try:
? ? do_something_risky()
except Exception as e:
? ? logging.error("An exception occurred", exc_info=True)
? ? # 可以选择再次抛出异常,保持原始堆栈跟踪信息
? ? raise

?例7

try:
? ? possibly_fail()
except SomeException:
? ? handle_error_and_continue()
# 继续执行后续代码
proceed_with_other_tasks()

例8

try:  
    # 尝试执行的代码  
    x = 1 / 0  # 这里会引发一个ZeroDivisionError  
except ZeroDivisionError as e:  
    # 当发生ZeroDivisionError异常时执行的代码  
    print("发生了除以零的错误,错误信息为:", e)  
else:  
    # 如果try代码块中的代码没有引发任何异常,则执行此代码块  
    print("try代码块中的代码成功执行")  
finally:  
    # 不论是否发生异常,都会执行的代码  
    print("finally代码块中的代码总是会执行")

?结论

通过try结构,可以构建复杂的异常处理逻辑,确保程序在遇到预期或非预期错误时能给出适当的反馈,并采取恢复措施。

文章来源:https://blog.csdn.net/boysoft2002/article/details/135430367
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。