Python错误处理 -- 异常捕获

时间:2024-07-06 13:10:53

本套课在线学习视频(网盘地址,保存到网盘即可免费观看):

​https://pan.quark.cn/s/ebe046289eb0​

本文详细介绍了Python编程中try-except-else-finally语句的用法,重点讲解了如何通过这些语句对程序中可能出现的异常进行捕获和处理。特别强调了针对特定类型和未指定类型错误的捕获方法,以及else和finally子句的作用,指出它们在确保代码稳健性方面的关键作用。此外,文章还探讨了在爬虫开发过程中如何利用try-except语句应对请求失败、服务器响应延迟等异常情况,以提升代码的稳定性和可靠性。通过实例分析,明确了不论程序是否发生异常,某些代码片段总是需要被执行的重要性,进而提高了爬虫的健壮性和效率。

00:00 - 异常捕获与错误处理

异常捕获的基本用法

程序运行时可能出现各种异常,包括但不限于逻辑错误和外部环境导致的问题。异常会导致程序暂停执行并显示错误消息。为了保证程序能够在遇到异常时继续运行,可以使用Python中的try-except语句进行异常捕获。

try:
    # 可能产生错误的代码
    result = 10 / 0
except ZeroDivisionError as e:
    # 捕获特定类型的错误
    print(f"Error: {e}")
except Exception as e:
    # 捕获所有类型的错误
    print(f"An error occurred: {e}")

示例:处理除数为零的错误

try:
    result = 10 / 0
except ZeroDivisionError as e:
    print(f"Error: {e}")
else:
    print(f"Result: {result}")
finally:
    print("Execution completed.")

02:00 - Python异常处理:try except else finally详解

try-except-else-finally语句

  • try: 包含可能产生错误的代码。
  • except: 捕获并处理特定类型的错误。
  • else: 当try块中的代码没有产生错误时执行。
  • finally: 无论是否发生错误,都会执行。

示例:综合应用try-except-else-finally

try:
    result = 10 / 2
except ZeroDivisionError as e:
    print(f"Error: {e}")
except Exception as e:
    print(f"An error occurred: {e}")
else:
    print(f"Result: {result}")
finally:
    print("Execution completed.")

捕获所有类型的错误

try:
    result = 10 / 0
except Exception as e:
    print(f"An error occurred: {e}")
else:
    print(f"Result: {result}")
finally:
    print("Execution completed.")

06:30 - 理解并应用异常捕获机制优化爬虫

爬虫中的异常处理

在爬虫开发过程中,经常会遇到请求失败或服务器响应延迟等问题,导致程序运行异常。为保证代码的稳定性和可靠性,引入try-except语句进行异常捕获至关重要。

示例:爬虫中的异常处理

import requests

def fetch_data(url):
    try:
        response = requests.get(url, timeout=5)
        response.raise_for_status()  # 检查响应状态码
    except requests.Timeout as e:
        print(f"Request timed out: {e}")
    except requests.RequestException as e:
        print(f"Request failed: {e}")
    else:
        print(f"Response status code: {response.status_code}")
        return response.text
    finally:
        print("Request completed.")

url = "https://example.com"
data = fetch_data(url)
if data:
    print(data[:100])  # 打印响应内容的前100个字符

重试机制

import requests

def fetch_data(url, retries=3):
    for i in range(retries):
        try:
            response = requests.get(url, timeout=5)
            response.raise_for_status()
            return response.text
        except requests.RequestException as e:
            print(f"Attempt {i+1} failed: {e}")
    return None

url = "https://example.com"
data = fetch_data(url)
if data:
    print(data[:100])
else:
    print("All attempts failed.")

总结

在Python编程中,使用try-except-else-finally语句进行异常捕获和处理是确保代码稳健性的关键。通过捕获特定类型和未指定类型的错误,并结合else和finally子句,可以有效地处理程序中可能出现的异常情况。在爬虫开发中,合理应用异常捕获机制可以显著提高代码的稳定性和可靠性,确保在遇到请求失败、服务器响应延迟等问题时,程序能够优雅地处理异常并继续执行。