Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止变量更改为;无”;如果该字段在python中为空_Python_Openpyxl - Fatal编程技术网

如何防止变量更改为;无”;如果该字段在python中为空

如何防止变量更改为;无”;如果该字段在python中为空,python,openpyxl,Python,Openpyxl,我正在尝试读取excel文件中的单元格并将其分配给变量。当单元格为空时,问题就出现了。然后给变量分配字符串“None”。我希望它是空白的(“”)。在Python中,有没有一种简单的方法可以在一行中完成这项工作?像这样的 a = str(sheet.cell(row=3, column=2).value) if (a != "None") else: a = "" 我的目标是在不多次写入(sheet.cell(row=3,column=2).value)的情况下实现这一点。因为我还有很多其他

我正在尝试读取excel文件中的单元格并将其分配给变量。当单元格为空时,问题就出现了。然后给变量分配字符串“None”。我希望它是空白的(“”)。在Python中,有没有一种简单的方法可以在一行中完成这项工作?像这样的

  a = str(sheet.cell(row=3, column=2).value) if (a != "None") else: a = ""

我的目标是在不多次写入(sheet.cell(row=3,column=2).value)的情况下实现这一点。因为我还有很多其他变量要检查,这使得维护变得更加困难。

您可以将它分成几行,这样会感觉更好,并且您有几个选项:

res = str(sheet.cell(row=3, column=2).value)
a = "" if res == "None" else res
或其他选项,例如:

a = {"None" : ""}.get(res, res)   

如果您有一个值为“None”的单元格,则您的方法是危险的。最具python风格的方式有两行:

v = sheet.cell(row=3, column=2).value
a = str(v) if v is not None else ''

多次写入
sheet.cell(row=3,column=2).value
会导致对sheet对象的不必要访问,因此避免它的目标是好的。但是,你的目标应该是把它写在一行中,而不是把它写好。

两行一行的,它们不会取代一个好的旧的“分配然后测试”两行方法:

创建一个生成器并在一个元素列表上迭代,该列表允许分配一个变量,然后在此变量上使用三元,使用
next
迭代一次并获得值:

v = next("" if x is None else str(x) for x in [sheet.cell(row=3, column=2).value])
可能更有趣:如果值不能为0,可以使用

v = str(sheet.cell(row=3, column=2).value or "")

现在节省一行值得吗?我会让你弄明白的。

人们可能会想写
v=str(sheet.cell(row=3,column=2.value)或“”)
但是如果单元格中包含数字零,那就不会像预期的那样工作了为什么要转换为字符串?我也更喜欢布尔比较的可读性
如果…否则
但是,当然,0也是
False
。一般来说,
[]
{}