在日常工作中,有时会遇到一些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()才会实时调用取当前时间。