Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pymongo错误:bson.errors.invalidson:&x27;utf8';编解码器可以';t解码位置25中的字节0xa1:无效的开始字节_Python_Mongodb_Pymongo - Fatal编程技术网

Python pymongo错误:bson.errors.invalidson:&x27;utf8';编解码器可以';t解码位置25中的字节0xa1:无效的开始字节

Python pymongo错误:bson.errors.invalidson:&x27;utf8';编解码器可以';t解码位置25中的字节0xa1:无效的开始字节,python,mongodb,pymongo,Python,Mongodb,Pymongo,我用pymongo解决程序时遇到了麻烦 文件“D:\Python27\lib\site packages\pymongo-3.2.1-py2.7-win-amd64.egg\pymongo\cursor.py”,下一行1097 文件“D:\Python27\lib\site packages\pymongo-3.2.1-py2.7-win-amd64.egg\pymongo\cursor.py”,第1039行,在\u刷新中 文件“D:\Python27\lib\site packages\pym

我用pymongo解决程序时遇到了麻烦

文件“D:\Python27\lib\site packages\pymongo-3.2.1-py2.7-win-amd64.egg\pymongo\cursor.py”,下一行1097 文件“D:\Python27\lib\site packages\pymongo-3.2.1-py2.7-win-amd64.egg\pymongo\cursor.py”,第1039行,在\u刷新中 文件“D:\Python27\lib\site packages\pymongo-3.2.1-py2.7-win-amd64.egg\pymongo\cursor.py”,第903行,在发送消息中 文件“D:\Python27\lib\site packages\pymongo-3.2.1-py2.7-win-amd64.egg\pymongo\helpers.py”,第133行,在解包响应中 bson.errors.invalidson:“utf8”编解码器无法解码位置25:无效起始字节中的字节0xa1

我走进pymongo查找原因。我发现问题可能是由以下代码引起的

tasks =self.collection.find().sort('_id',pymongo.DESCENDING).limit(1000)
for task in tasks:  #If i use this way,it will also touch this problem

task = self.collection.find_one()#It would do so,too

result={“cursor\u id”:struct.unpack(我最近收到了一条类似的错误消息,很难找到相关帮助

快速解决 我解决了在3.0下降级pymongo版本的问题。在3.0版发布了“重写的纯Python BSON实现”。我发现新实现在以BSON格式序列化时管理Python utf8和unicode编码时遇到问题

分析
很明显,错误来自数据库中的无效bson…类似于。也许您应该发布错误。

我使用的是Python 3.6、pymongo 3.4.0

根据文档,您可以使用“with_options”方法克隆集合,这对我来说很有用:

    result = {"cursor_id": struct.unpack("<q", response[4:12])[0],
          "starting_from": struct.unpack("<i", response[12:16])[0],
          "number_returned": struct.unpack("<i", response[16:20])[0],
          "data": bson.decode_all(response[20:], codec_options)}

您需要将unicode_decode_error_处理程序参数传递给MongoClient,并至少使用pymongo 3.5.1

 col_article = col_article.with_options(codec_options = bson.CodecOptions(unicode_decode_error_handler="ignore"))

看起来Python2.7默认设置了“忽略”,但在Python3.6.1中,您必须自己做。这将忽略Unicode错误并让光标继续迭代,pymongo将尽力重建JSON数据。

我在
bson.decode\u file\u iter(f)中遇到这个问题
。根据您的链接,我将其更改为
bson.decode\u file\u iter(f,bson.CodecOptions(unicode\u decode\u error\u handler=“ignore”))
解决了我的问题。我看到
'utf8'编解码器无法解码位置0处的字节0xfd:无效的开始字节
,并将
unicode\u decode\u error\u handler='ignore'
添加到构造函数中修复了它。
 col_article = col_article.with_options(codec_options = bson.CodecOptions(unicode_decode_error_handler="ignore"))
import pymongo
import json
from pymongo import MongoClient

if __name__ == '__main__':

    client = MongoClient(
        host="whatever_your_host_is",
        maxPoolSize=50,
        unicode_decode_error_handler='ignore'
    )


    my_db=client['my_db']
    collection=my_db['my_collection']

    cursor = collection.find({"whatever": "some_stuff"})

    for document in cursor:
          print(document)