大象还真可能为蚂蚁所绊倒,我又一次用GAE写代码,这回是每天都写一点点了,遇到了不少问题,也没人可以问,只好自己Google和看文档,或者猜测了。今后有啥遇到啥问题,在这里记录总结一下,让自己不会犯同样的错误,也希望对别人有所帮助。

       最近遇到的几个问题都是跟datastore及其类型不匹配有关的,我遇到的是动不动就500了,从打印出来的log里还看不出是啥问题,睁大眼睛看代码,却发现没有啥异常。我第一次发现是变量类型有关的还是从打印数字时发现的,那时我发现竟然能打印出"100 < 99"这样的log来时,我就知道出问题了,果然,一个是int类型,一个是str类型,打印出来的都是数字,看起来都是一样的,到赋值的时侯就出错了。搞得我,现在赋个数值都先来个强制转换了。以前开发C时有Pclint这样的工具,现在Python不知道有啥工具?

解决方法1:强制转换
例1:
class Teacher(db.Model):
    userid   = db.IntegerProperty(required=True)
将str转换为int类型:userid   = int(uid)  

例2:
class Student(db.Model):
    number    = db.StringProperty(required=True)
强制转换成str类型:
student_id = request.GET.get("s_id", None) #从request里获得的数据尤其要注意
number = str(student_id)

例3:
如果从request接收到字符串数据的时候,我们有时要将送来的数据显式编码为UTF-8
self.request.get(‘memo’).encode(‘utf-8’)

解决方法2:调试时遇到错误时,考虑先判断变量的类型,看看是不是变量类型不匹配造成的问题。

Python判断变量类型可以用两种方法,似乎方法2比较流行:
import types
1:
type(x) is types.IntType # 判断是否int 类型
type(x) is types.StringType #是否string类型

2:
type(x) == type(1) # 是否 int 类型
type(x) in (type(u’’) , type(’’)): # 是否string, unicode类型