如何修复“ NameError:未定义全局名称'ValidationError'”

时间:2019-08-27 00:24:13

标签: mongodb input insert validationerror

我正在解决这个问题:

使用适当的MongoDB语句将新的键值对插入文档中。具体来说,请使用Python或Java创建函数或方法 它将从文件或标准输入流中读取JSON表示法的值对流,并将此文档插入到stocks集合中。您 还需要创建一个简单的应用程序支架来测试您的功能或方法。

我已经开发了代码,它可以让我输入信息。但是,它总是导致此错误,我不知道是什么原因引起的。

import json
from bson import json_util
from pymongo import MongoClient

connection = MongoClient('localhost', 27017)
db = connection['market']
collection = db['stocks']

def insert_document(document):
  checker = True
  try:
    stars = "*" * 50+"\n"
    print(stars)
    document = input('Enter Your Document: ')
    result = collection.insert_one(document)
    stars = "*" * 50+"\n"
    print ("\nSubmitted Document\n" + stars + document)

  except ValidationError as ve:
    abort(400, str(ve))
    checker = False
    stars = "*" * 50+"\n"
    return checker+stars

def main():
  myDocument = {"keyName": "test value data"}
  print insert_document(myDocument)
main()

预期结果:

*****************************************************
Enter Your Document: {"Ticker" : "123_EXAMPLE","Volume": 396,"Industry":"Example Industry Co."}
Submitted Document
*****************************************************
{"Ticker" : "123_EXAMPLE","Volume": 396,"Industry":"Example Industry Co."}
True
*****************************************************

实际结果:

**************************************************

Enter Your Document: {"Ticker" : "123_EXAMPLE","Volume": 396,"Industry":"Example Industry Co."}
Traceback (most recent call last):
  File "test.py", line 27, in <module>
    main()
  File "test.py", line 26, in main
    print insert_document(myDocument)
  File "test.py", line 19, in insert_document
    except ValidationError as ve:
NameError: global name 'ValidationError' is not defined

1 个答案:

答案 0 :(得分:0)

您的ValidationError消息是因为您在导入中没有引用ValidationError。 ValidationError不是pymongo会抛出的异常,因此您可以将其更改为更通用的

  except Exception as e:

引发错误的原因是因为您在应插入JSON时尝试插入字符串。即使它看起来像JSON,也必须使用json.loads将其转换为JSON。

collection.insert_one(json.loads(document))