python - 如何在 Python 中检测字符串并将其转换回正确的类型

标签 python string casting

在我的 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 中调用 reprstr 的特殊情况下,您可能需要这样:

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/

相关文章:

c++ - 在 dynamic_casting 之后删除指针是否安全?

html - WPF 为每个 TextBlock 拆分 HTML 字符串

ios - 从运行时可见的标签中获取字符串

不同目标的 C++ 转换(编译器)

Python - 如果用户试图在中途停止执行,有没有办法优雅地清理函数?

c++ - 计算用户输入的字符串中的单词

c++ - 这条线想做什么?

Python:增加数组索引

python - 如何通过按钮更改模型?

python - 2个列表之间的共同元素比较