今天本来在悠闲的摸鱼划水,突然项目上的人员联系我,说导出文档出故障了,原本400多项数据,只导出300多。
我优先分析是不是数据有部分有问题,然而经过排查并没有。然后分析只能是程序有问题,导致导出过程被打断了。
让他复制了报错日志给我
Exception in Tkinter callback
Traceback (most recent call last):
File "tkinter\__init__.py", line 1885, in __call__
File "longhui.py", line 346, in <lambda>
File "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了,唔,不愧是我~
本文讲述了作者在Python项目中遇到的程序中断问题,通过分析发现`||`运算符在Python中与Java不同,需用`or`替换。作者揭示了在处理字符串和数值判断时的陷阱,并提供了代码修复实例。
3万+

被折叠的 条评论
为什么被折叠?



