在我的 python 服务器代码中,我将所有参数作为字符串获取。我不知道参数的原始类型。
例如, 如果实际值为整数 10,则收到的参数为字符串值 '10' 如果实际值是字符串“apple”。收到的参数是未更改的字符串“apple” 如果实际值为 float 10.0 ,则收到的参数为字符串值 '10.0'
检测参数的正确类型并将其转换回第一个示例中的“int”、第二个示例中的“string”、第三个示例中的“float”的最佳方法是什么?
最佳答案
理想情况下,您希望修复客户端代码,以便它首先不会丢弃类型信息。或者,如果您做不到这一点,您至少想知道这些字符串的生成规则是什么,这样您就可以找出如何反转该规则的方法。
但是,如果这两种情况都不可能,并且您需要猜测,一种可能性是这样的:
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"
发送到您的服务器。
关于python - 如何在 Python 中检测字符串并将其转换回正确的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27117491/