今天本来在悠闲的摸鱼划水,突然项目上的人员联系我,说导出文档出故障了,原本400多项数据,只导出300多。
我优先分析是不是数据有部分有问题,然而经过排查并没有。然后分析只能是程序有问题,导致导出过程被打断了。
让他复制了报错日志给我
Exception in Tkinter callback Traceback (most recent call last): File "tkinter__init__.py", line 1885, in __call__ File "longhui.py", line 346, inFile "longhui.py", line 286, in chuliExcel ValueError: invalid literal for int() with base 10: ''
结合我的代码,发生问题的部分是
sheet.write(7, 6, '<45°' if (((type(i['k']) == str) & (i['k'] == '')) | (int(i['k']) < 45)) else '>45°', setStyle())
分析得出,应该是int(i['k'])发生了错误。
其实分析到这里的时候我已经有一些迷惑了,因为我本来是做java出身,在java里,||表示或者的意思,而且,在使用||进行判断的时候,如果前一个判断因子为TRUE,那么||后面的判断因子就不再进行计算了。
如果这是一条java语句,这么写肯定是不会有问题,但是现在看来,在python里,两个判断因子都进行了计算,所以产生了错误,从而导致程序中断。
so,在我多方查证和测试下,最终证明,在python中想要达到同样效果,应使用or来代替|,所以最终代码改为
sheet.write(7, 6, '<45°' if (((type(i['k']) == str) & (i['k'] == '')) or (int(i['k']) < 45)) else '>45°', setStyle())
这样就OK了,唔,不愧是我~



