zoukankan      html  css  js  c++  java
  • python之eval函数的应用实例

    众所周知,eval() 函数是用来执行一个字符串表达式,并返回表达式的值。

    语法:eval(expression[, globals[, locals]])

    eval函数有很强大的用法,但也有一定的风险性。这里主要记录项目中用到的eval函数的两种用法。

    一、将字符串转换为相应的对象

    如:将string转换为list、tuple、dict

    例:将string转换为dict

    data = "{'username':'admin','pwd':'123456'}"
    print(data,type(data))
    data = eval(data)
    print(data, type(data))
    

     如上代码输出为:

    {'username':'admin','pwd':'123456'} <class 'str'>
    {'username': 'admin', 'pwd': '123456'} <class 'dict'>
    

     可以看到,eval函数转换后,就将原来string类型的data转换为dict了。

    实际上,转换前的data也是一个json字符串,也就是实现了json->dict。

    实战:

    在接口自动化框架中,我们通常把测试数据存放在excel中,利用openpyxl从excel中读取测试数据用于测试。

    直接从excel中读出来的都是string类型,一般我们的请求参数是dict类型,这就需要把读取的string类型的数据转换为dict。

    从excel中读取某sheet第二行第五列的数据:{'username':'admin','pwd':'123456'}

    from openpyxl import load_workbook
    sheet = load_workbook(bookname)[sheetname]
    data = sheet.cell(2, 5).value
    

     直接读取出来的data类型是string,相当于:”{'username':'admin','pwd':'123456'}“

       使用data = eval(data) ,转换为dict类型,就可以传到请求参数里啦。

    二、将字符串转成表达式并执行

    先看一个简单的例子:

    eval('print("我是test语句")')
    

     如上代码实际上会执行  print("我是test语句")  这段代码。也就是eval将  ‘print("我是test语句")’  这段字符串转成了可执行的python语句,并执行它。

    实战:

    测试几个webservice接口:

    from suds.client import Client
    def ws(url,data,method):  
        client = Client(url)
        if method == 'sendMCode':
            result = client.service.sendMCode(data)
        return result

     webservice接口是如上这样的调用方式,如上代码调用了senMCode的接口。如果我们有很多个接口,可能就需要写很多个if语句,会很繁琐,这是不可取的。

    这时候eval就派上用场了:

    from suds.client import Client
    def ws(url,data,method):
        client = Client(url)
        result = eval('client.service.{0}({1})'.format(method, data))
        return result
    

     让eval函数把 'client.service.{0}({1})'.format(method, data) 转成可执行的python语句,就可以把method也参数化,不需要那么多if语句了。

  • 相关阅读:
    流媒体服务器搭建
    netcore问题总结
    Linux(Debian)网卡设置
    windows服务器让WEB通过防火墙的问题
    经典算法一 --- 过桥问题
    MySQL字段属性介绍
    什么是流程控制
    终于决定了,转行。
    浅析Openflow
    JavaScript 中 this 的详解
  • 原文地址:https://www.cnblogs.com/Dahlia/p/10869391.html
Copyright © 2011-2022 走看看