将输入参数转换为正确的类型

Casting input arguments to correct type

我在接收不同类型参数(整数、字符串、字典、列表...)的文件中有一个函数

通常我从另一个函数调用这个函数,传递正确的参数,但我也希望能够从控制台调用它(用于测试目的)

问题是输入参数存储为字符串,所以我不能直接将它们传递给函数。

有没有一种方法可以自动将参数从控制台传递到保持正确格式的函数?

import sys

def myfunction(mystring, myint, mydict, mylist):
    # check that types are correct
    assert type(mystring) is str
    assert type(myint) is int
    assert type(mydict) is dict
    assert type(mylist) is list

    # print input parameters
    print mystring
    print myint 
    print mydict
    print mylist

def main(args):
    print args
    myfunction(*args)   # pass the parameters to the function

if __name__ == '__main__':
    main(sys.argv[1:])  # discard 1st element which is the filename

要从控制台调用我的函数,我只是这样做:

python myfile.py "hello" 5 {'age':30} [1,2,3,4]

第一个 assert 成功,因为它需要一个字符串,但第二个失败,因为它需要一个 int。

来自主函数的 print args returns ['hello', '5', '{age:30}', '[1,2,3,4]'](因此参数已被正确解析,但它们存储为字符串)。

我只需要将它们转换为正确的格式。

有什么想法吗?

您可以将它们作为 python 列表传递:

python myfile.py "['hello',5,{'age':30},[1,2,3,4]]"

然后使用 ast.literal_eval

获取参数
import ast,sys
if __name__ == '__main__':
    args = ast.literal_eval(sys.argv[1])
    main(args)

现在 argslist 价值 ['hello', 5, {'age': 30}, [1, 2, 3, 4]]

为了在 shell 之间真正可移植(windows,Linux),首选上述方法:双引号保护参数,单引号保护字符串。反之则适用于 Linux/MSYS shell 但不适用于 Windows(单引号在 windows 中并不是真正的引号)