【问题标题】:PyMongo insert_one exception/error handlingPyMongo insert_one 异常/错误处理
【发布时间】:2020-02-05 08:11:12
【问题描述】:

我正在尝试确保我已设置错误处理。我不确定我是否使用了 try、except 和 return 正确。

所需的输出是 True 或 False 如果文档插入成功,则为 True,否则为 False。我做对了吗?我担心的是它总是会返回 true 吗?不完全确定 try/except 是如何工作的。谢谢。

import json
import pymongo
from bson import json_util
from pymongo import MongoClient
from pymongo import errors

connection = MongoClient('localhost', 27017)
db = connection['city']
collection = db['inspections']

def insert_document(documentToInsert):
    try:
      collection.insert_one(documentToInsert)
      return True
    except WriteConcernError as wce:
      print(wce)
      return False
    except WriteError as we:
      print(we)
      return False


def main():
    document = { 
      "id" : "11111-2019-ENFO",
      "certificate_number" : 9278806,
      "business_name" : "TAXOLOGY",
      "date" : "Feb 20 2015",
      "result" : "No Violation Issued",
      "sector" : "Accounting - 111",
      "address" :
      {
        "city" : "MISSION HILLS",
        "zip" : 91401,
        "street" : "Sepulveda",
        "number" : 1809
      }
    }

    print(insert_document(document))

main()

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

    我没有看到任何write_concern 被传入作为您写入的选项,我假设您可能看不到WriteConcernError。检查此:pymongo.write_concern.WriteConcern 以获取有关如何设置 WriteConcern 的示例。此外,仅当您想在发生某种类型的错误时执行某些功能时才需要这些错误检查,因为您只需要返回 True / False,然后您可以删除所有这些错误检查:

    代码:

    connection = MongoClient('localhost', 27017)
    db = connection['city']
    collection = db['inspections']
    
    
    def insert_document(documentToInsert):
        try:
            collection.insert_one(documentToInsert)
            return True
        except Exception as e:
            print("An exception occurred ::", e)
            return False
    
    
    def main():
        document = {
            "id": "11111-2019-ENFO",
            "certificate_number": 9278806,
            "business_name": "TAXOLOGY",
            "date": "Feb 20 2015",
            "result": "No Violation Issued",
            "sector": "Accounting - 111",
            "address":
            {
                "city": "MISSION HILLS",
                "zip": 91401,
                "street": "Sepulveda",
                "number": 1809
            }
        }
    
        print(insert_document(document))
    
    
    main()
    

    【讨论】:

    • 对不起,愚蠢的问题,但 :: 是什么,是某种格式,或者您只是在打印这些字符。但我的另一个问题是,如果 collection.insert_one 有错误,它仍然返回 True 还是跳过它?
    • @Etra : :: 就像我们打印它是为了在打印在一起时在文本和实际异常之间留出一些空间,如果collection.insert_one 有错误,它应该在except 处理函数返回False .. 您可以通过在您的文档中传递_id: 123 来测试它并尝试两次插入相同的文档 - 因为在mongo中_id 是唯一的,默认情况下它会抛出一个错误& 预期错误将被打印&然后按函数返回False..
    • 这真的很清楚,我不知道如何实际得到一个错误来测试它,但我完全忘记了_id。我现在了解 try/else 并且更好地捕捉错误。再次感谢。
    猜你喜欢
    • 2017-02-11
    • 2012-09-15
    • 2011-04-03
    • 2014-01-08
    • 2014-04-06
    • 2013-12-27
    • 2013-05-30
    • 1970-01-01
    • 2017-05-29
    相关资源
    最近更新 更多