将输入参数转换为正确的类型
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)
现在 args
是 list
价值 ['hello', 5, {'age': 30}, [1, 2, 3, 4]]
为了在 shell 之间真正可移植(windows,Linux),首选上述方法:双引号保护参数,单引号保护字符串。反之则适用于 Linux/MSYS shell 但不适用于 Windows(单引号在 windows 中并不是真正的引号)
我在接收不同类型参数(整数、字符串、字典、列表...)的文件中有一个函数
通常我从另一个函数调用这个函数,传递正确的参数,但我也希望能够从控制台调用它(用于测试目的)
问题是输入参数存储为字符串,所以我不能直接将它们传递给函数。
有没有一种方法可以自动将参数从控制台传递到保持正确格式的函数?
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)
现在 args
是 list
价值 ['hello', 5, {'age': 30}, [1, 2, 3, 4]]
为了在 shell 之间真正可移植(windows,Linux),首选上述方法:双引号保护参数,单引号保护字符串。反之则适用于 Linux/MSYS shell 但不适用于 Windows(单引号在 windows 中并不是真正的引号)