python使用re.findall()方法报错:TypeError: expected string or bytes-like object

本文介绍如何在Python中使用re模块进行参数匹配与替换的过程,并解决了在处理非字符串类型数据时出现的问题。
部署运行你感兴趣的模型镜像

项目场景:

在接口自动化测试中,使用re模块对参数进行匹配查找


问题描述

例如:从用例中匹配:#(.*?)#的数据,进行替换

def replace_data(data):
    '''
    1.从yaml字典匹配字符#xxx#的字符
    2.将找到的字符与配置文件进行替换,如果找到了,就去配置文件中替换或者去全局变量获取
    '''
    # data={"username": "#username#", "password": "abcd123", "system": "GW"}
    res=re.findall("#(.*?)#",data)
    if res:
        for item in res:
            try:
                value=hc.get("test_data",item)
            except:
                try:
                    value=getattr(EvnData,item)
                except AttributeError:
                    continue
            data=data.replace("#{}#".format(item),value)
    return data

结果报错

Traceback (most recent call last):
  File "D:/wp/tool/pycharm/test/common/handle_data.py", line 34, in <module>
    case = replace_data(case)
  File "D:/wp/tool/pycharm/test/common/handle_data.py", line 16, in replace_data
    res=re.findall("#(.*?)#",data)
  File "D:\wp\tool\python\lib\re.py", line 223, in findall
    return _compile(pattern, flags).findall(string)
TypeError: expected string or bytes-like object

原因分析:

re.finall()里面是对字符串进行匹配
在这里插入图片描述


解决方案:

提示:将finall()里面的数据转换为字符串:

case={"url":"/admin/login",
          "method": "post",
          "request_data": {"username": "#username#", "password": "abcd123", "system": "GW"},
          "expect": {"msg": "操作成功", "code": 200}}
    case=replace_data(str(case))
    print(case)


您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姑娘别秃头

你的鼓励是为我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值