Python常用异常处理

鞭码形动 / 2023-07-25 / 原文

Python常用异常处理

  • 自定义异常处理接口返回值
    -- for循环处理接口数据

假定匹配接口里的 手机号码,将自定义异常丢入想要数据里列表。

import re

def process_data(data_list):
    list_str = []
    for data in data_list:
        try:
            # 使用正则表达式匹配手机号码,以1开头,后面跟着10个数字
            pattern = r'^1\d{10}$'
            if re.match(pattern, data):
                # 如果数据符合手机号码的匹配规则,将其添加到 list_str 列表中
                list_str.append(data)
            else:
                # 如果数据不是手机号码,抛出自定义异常
                raise ValueError("这个数据不是手机号码")
        except ValueError as ve:
            # 捕获自定义异常,并将异常信息添加到 list_str 列表中
            list_str.append(str(ve))
    
    return list_str

# 测试数据
data_list = ["15812345678", "13298765432", "12345678900", "18888888888", "hello world"]
result_list = process_data(data_list)
print(result_list)

按照异常处理的标准写法 处理上述问题

import re


def process_data(data_list):
    list_str = []
    for data in data_list:
        try:
            # 使用正则表达式匹配手机号码,以1开头,后面跟着10个数字
            pattern = r'^1\d{10}$'
            if re.match(pattern, data):
                # 如果数据符合手机号码的匹配规则,将其添加到 list_str 列表中
                list_str.append(data)
            else:
                # 如果数据不是手机号码,抛出自定义异常
                raise ValueError("这个数据不是手机号码")
        except ValueError as ve:
            # 捕获自定义异常,并将异常信息添加到 list_str 列表中
            list_str.append(str(ve))
        else:
            # 没有异常发生时执行的代码
            # 这里可以放一些处理成功情况的逻辑
            pass
        finally:
            # 无论是否发生异常,都会执行的代码
            # 这里可以放一些清理工作的逻辑
            pass

    return list_str


# 测试数据
data_list = ["15812345678", "13298765432", "12345678900", "18888888888", "hello world"]
result_list = process_data(data_list)
print(result_list)

正则匹配中的所有规则

正则表达式规则和用法

在 Python 语言中,正则表达式的功能由 `re` 模块提供。以下是在 Python 中使用正则表达式的一些常见规则和解释:

1. `re.compile(pattern)`
   - 解释:用于将正则表达式的字符串模式编译成正则对象,以便后续复用匹配。
   - 示例:`pattern = re.compile(r'\d{3}-\d{2}-\d{4}')`

2. 字符匹配:
   - `.`:匹配任意一个字符(除了换行符)。
   - `\d`:匹配任意数字,等同于`[0-9]`。
   - `\D`:匹配任意非数字字符,等同于`[^0-9]`。
   - `\w`:匹配任意字母、数字或下划线,等同于`[a-zA-Z0-9_]`。
   - `\W`:匹配任意非字母、数字或下划线字符,等同于`[^a-zA-Z0-9_]`。
   - `\s`:匹配任意空白字符,包括空格、制表符、换行符等。
   - `\S`:匹配任意非空白字符。

3. 重复匹配:
   - `*`:匹配前面的字符零次或多次。
   - `+`:匹配前面的字符一次或多次。
   - `?`:匹配前面的字符零次或一次。
   - `{m}`:匹配前面的字符恰好出现 m 次。
   - `{m, n}`:匹配前面的字符出现 m 到 n 次。

4. 特殊字符:
   - `^`:匹配字符串的开始位置。
   - `$`:匹配字符串的结束位置。
   - `\b`:匹配单词的边界。

5. 分组和捕获:
   - `()`:创建一个匹配组,用于对子表达式进行分组。
   - `(?P<name>pattern)`:创建一个命名捕获组。
   - `(?P=name)`:引用前面命名捕获组匹配到的内容。

6. 选择符:
   - `|`:用于在多个模式中选择一个匹配。

7. 边界匹配:
   - `\b`:匹配单词边界。

8. 模式修饰符:
   - `re.I`:忽略大小写匹配。
   - `re.M`:多行匹配。
   - `re.S`:让 `.` 匹配任意字符,包括换行符。
   - `re.X`:忽略模式中的空白和注释。
   - `re.A`:ASCII 匹配模式。

示例:
```python
import re

pattern = re.compile(r'\d{3}-\d{2}-\d{4}')
result = pattern.match('123-45-6789')
if result:
    print("匹配成功")
else:
    print("匹配失败")
```

以上是一些在 Python 中常见的正则表达式规则和用法。使用 `re` 模块时,需要根据具体的需求和字符串模式来灵活使用这些规则。