我与‘or’、‘|’和‘||’不得不说的故事

本文讲述了作者在Python项目中遇到的程序中断问题,通过分析发现`||`运算符在Python中与Java不同,需用`or`替换。作者揭示了在处理字符串和数值判断时的陷阱,并提供了代码修复实例。

今天本来在悠闲的摸鱼划水,突然项目上的人员联系我,说导出文档出故障了,原本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了,唔,不愧是我~

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值