我尝试使用GMail API下载一条消息。以下是我的追溯: pdiracdelta @ pdiracdelta-Laptop:〜/ GMail元数据$ ./main.py
credentials = get_credentials()
print(credentials)
print(str(credentials.invalid))
http = credentials.authorize(httplib2.Http())
service = discovery.build('gmail', 'v1', http=http)
以下是一段代码,它在Traceback之前生成凭证对象和布尔打印。它确认凭证对象有效,并按照Google:
的建议使用service = discovery.build('gmail', 'v1', http=http)
这里出了什么问题?在我看来,我没有错,因为问题可以追溯到select s.studentId, r.resultID as ThisResultID, r.*, arv.*, u.fullname as TeacherName from (Results R
left join AssessmentResultValues arv on r.resultID = arv.resultID)
left join users u on u.userID = R.userID
left join students as s on s.studentId = R.studentId
where arv.resulttypeID = 32
and assessmentID = 181
and yearID = 21
and Month = 0
and Term = 0
and Week = 0
and Semester = 1
and s.studentClassId = 3
order by dateentered
,它只使用有效信息(暗示堆栈中进一步使用的一个包无法处理这些有效信息)。这是一个错误,还是我做错了什么?
答案 0 :(得分:0)
更新:似乎use Respect\Validation\Validator as v;
$number = 123;
v::numeric()->validate($number); // true
函数现已修补。更新你的python版本应该解决问题(我现在使用的是3.6.7)。
在Padraic Cunningham的帮助下解决,他将问题确定为编码问题。我通过将_normalize_headers
应用于.decode('utf-8')
键并且值(header
是dict)来解决了这个问题,如果它们是字节类型的对象(显然是UTF-8编码的)并转换它们到python3字符串。这可能是由于谷歌API中混合了一些python2 / 3。
此修复程序还包括将所有代码从Google API示例更改为python3代码(例如异常处理),但最重要的是,我的解决方法是在第193-194行编辑headers
,将/usr/lib/python3/dist-packages/httplib2/__init__.py
函数重新定义为:
_normalize_headers(headers)
警告:此解决方法显然非常脏,因为它涉及编辑def _normalize_headers(headers):
for key in headers:
# if not encoded as a string, it is ASSUMED to be encoded as UTF-8, as it used to be in python2.
if not isinstance(key, str):
newkey = key.decode('utf-8')
headers[newkey] = headers[key]
del headers[key]
key = newkey
if not isinstance(headers[key], str):
headers[key] = headers[key].decode('utf-8')
return dict([ (key.lower(), NORMALIZE_SPACE.sub(value, ' ').strip()) for (key, value) in headers.items()])
包中的文件。如果有人找到了更好的解决方案,请在此处发布。