这让我大吃一惊。我错过了什么?
我正在尝试检测Excel工作表中的单元格是否为空。但是没有一个测试似乎按照我的预期方式工作。我希望简单的“非idkt”测试会检测到空字符串和None,但是没有......实际上,看起来似乎没有检测到 - 好 - 任何测试,因为在第三行,这是什么是印刷品。
代码:
def getFromExcelSheet():
wb = load_workbook("input.xlsx")
idkts = [];
idktRows = get_worksheet_as_list(wb.get_sheet_by_name('Inputs'))
# print "Got these idkts"
for row in idktRows:
# print row[0]
idkt = str(row[2]).strip()
filename = str(row[3]).strip()
if idkt == None:
print "Idkt == none"
if idkt is None:
print "Idkt is none"
if idkt == u"":
print "Idkt is ''"
if idkt != u"":
print "Idkt is !=''"
if not idkt:
print "not IDKT"
if idkt:
print "idkt"
print idkt
输出
Idkt is !=''
idkt
3398041577
Idkt is !=''
idkt
3498100937
Idkt is !=''
idkt
None
答案 0 :(得分:4)
idkt
不为空,它是包含单词'None'
的字符串。
这是你的问题:
idkt = str(row[2]).strip()
row[2]
是None
,当您在其上调用'None'
时会变为str
。
试试这个:
if idkt == 'None': print 'yay!'
在字符串转换之前,你最好先测试空虚:
idkt = str(row[2]).strip() if row[2] else None
答案 1 :(得分:1)
问题在于您将单元格转换为字符串,然后将结果与Python的None
(不是字符串)进行比较。
我假设你正在使用openpyxl,在这种情况下你应该通过.value
访问单元格的值,例如
idkt = row[2].value
然后,您将拥有一个标准Python对象(str
/ int
/ None
等),表示该单元格中的数据。您应该将此值用于非空检查,并且它将按照您原先预期的方式运行:
if idkt not in ('', None): # remember bool(0) == False
...