工作用python了大半年,不得不说python是门好语言,但是python的坑,尤其是python2的坑巨多。
对python2而言,最大的坑来自哪里呢?编码!
这篇文章会持续更新,记录python在使用过程中的各种坑
环境变量
在使用环境变量时,变量名中不能包含“-”(短横线),否则会导致无法解析
host = self.env.get("redishost")
是没有问题的,但是
host = self.env.get("redis-host")
会直接解析不到
base64 编码
在将string或者什么其他东西变为base64编码的时候,如果要将结果放在http请求中处理(即使是使用POST请求),那么应该使用:
record = base64.urlsafe_b64encode(record)
而不能使用
record = base64.b64encode(record)
这个urlsafe其实是原版的一个wrapper,会将原来编码中的“/”和“+”加以替换,避免在网络传输中失真
在解码的时候也需要注意,urlsafe_b64encode对应的解码是:
base64.urlsafe_b64decode(signature_b64)
但是,这个语句在某些版本上直接抛出异常:
TypeError: character mapping must return integer, None or unicode
此时解决的方案是将变量重新编码为ascii
base64.urlsafe_b64decode(signature_b64.encode('ascii'))