Pitfall and Caveats in Programming
在日常工作中,有时会遇到一些bug或者坑。产生的原因不一而足,只有在事后理性复盘,才能避免在同一个地方跌倒两次。 谨在此记录自己在实际中遇到的坑,供大家参考,也提醒自己。
Mac Dev Setup
pip install MySQL-Python/mysql-client failed
error:
ld: library not found for -lssl
env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip install MySQL-Python
Python
空值
现象:在python中,(0, None, [], (), ‘‘)的bool值都为False,不注意的时候会产生不易排查的bug。 一个现实场景:取缓存,缓存不命中返回None, 缓存命中,但是值为(0, ‘’, [], set()), bool值都为False
例子:
vege_table = {
'apple': 0,
'banana': 1,
}
value = vege_table.get('pork')
if value:
print('You cannot get port from vege table!')
解释: 此时,0, None的bool值都为False, 原代码的应该改为:
if Value is None:
将当前时间赋值给常量或类属性
现象:常量或者类属性只在加载时执行一次,所以时间就是加载时的时间,而不是程序执行时的时间
import datetime
TODAY = datetime.date.today()
解释:无论在何时调用TODAY,TODAY都是加载时的时间
import datetime
class Clock:
now = datetime.datetime.now()
def get_now(self):
reutn datetime.datetime.now()
解释:无论何时调用Clock().now都是类加载时的时间,Clock().get_now()才会实时调用取当前时间。