【发布时间】: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 进行更新