在我的python服务器代码中,我将所有参数都作为字符串获取。我不知道论证的原始类型。
例如, 如果实际值是整数10,则接收的参数是字符串值'10' 如果实际值是字符串“apple”。收到的参数是不变的字符串'apple' 如果实际值是float 10.0,则接收的参数是字符串值'10 .0'
在第一个示例中,检测正确类型的参数并将它们转换回'int'的最佳方法是什么,第二个示例中的'string',第三个示例中的'float'?
答案 0 :(得分:3)
理想情况下,您希望修复客户端代码,以便它不会丢弃类型信息。或者,如果你不能这样做,你至少想知道这些字符串是如何生成的规则,所以你可以弄清楚如何反转规则。
但如果这些都不可能,你需要猜测,一种可能性是这样的:
def parseval(s):
try:
return int(s)
except ValueError:
pass
try:
return float(s)
except ValueError:
pass
return s
这会将有效int
作为int
的任何内容视为任何有效int
但可能有效float
的内容。 float
以及其他任何内容str
。
在输出来自Python中调用repr
或str
的特殊情况下,您可能需要这样:
import ast
def parseval(s):
try:
return ast.literal_eval(s)
except ValueError:
return s
这会将任何Python文字,或任何由文字和其他由递归等组成的集合显示组成的集合显示转换为原始值,但保留其他任何内容。 (如果您知道客户端使用的是repr
而不是str
,那么您应该离开try
/ except
。但如果它使用的是str
,则可以使用,因为它依赖于以下事实:对于每种文字但字符串,str
可解释为repr
。)
但请注意,这样就无法将字符串"10"
发送到您的服务器。