【问题标题】:Python cast string to type if string is not none [duplicate]如果字符串不是无,Python将字符串转换为类型[重复]
【发布时间】:2015-03-20 20:57:18
【问题描述】:

我有一长串要转换和分配的值。每个值都有可能为无。如果值为无,我想将其保留为无,否则进行强制转换。原因是这些值最终会保存在数据库中,以后我必须将 None 转换为 NULL。

到目前为止,我发现的最简单的方法是在每个赋值中添加内联 if 语句。

self.number = Decimal(input.number) if input.number else None

我不觉得代码很吸引人,它缺乏可读性,并且为每个输入值编写这些语句会很乏味。如果 input.number 为 None,我希望 Decimal(input.number) 只返回 None ,但情况似乎并非如此。有没有更简单的方法来做到这一点?我想我可以创建自己的 Decimal_ 函数并调用它?


更新:

我听取了建议并提出了这个建议

def dec_(string):
    if string is None:
        return None
    else:
        try:
            return decimal.Decimal(string)
        except:
            return None
.....

self.number = dec_(input.number)

现在我只需要为我需要做的每种类型的演员制作一个演员表包装器。


更新2:

我认为它应该通过简单地在 dec_ 中运行 try 块来工作。

def dec_(string):
    try:
        return decimal.Decimal(string)
    except:
        return None

【问题讨论】:

  • “我可以创建自己的 chr_ 函数并调用它” - 可以,如果你愿意!
  • 我觉得这个问题令人困惑。您说“如果字符串不是无,则将字符串转换为类型”,但chr 只接受int 并将其转换为字符表示(字符串)。如果给定一个字符串,您当前的代码将抛出一个TypeError。也许用需要转换的值以及如何转换的示例来更新您的问题?
  • @Jack 你是对的。我为示例获取了一个类型转换,但没有对其进行测试。我将使用 Decimal cast 而不是 chr 进行更新

标签: python casting nonetype


【解决方案1】:

没有比您已经发现的更简单的内置方法了。但是编写自己的函数是认可的减少代码重复和增加重复任务可读性的方法。

但是,请注意您的代码和您的描述并不完全匹配:chr(input.something) if input.something else None 将给您None 如果input.something 是任何错误值,例如 0 或空字符串 - 显式测试 @ 987654324@ 如果你是这个意思。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    相关资源
    最近更新 更多