MongoEngine fieldDoesNotExist 错误但实际上是

Zer*_*ero 0 python error-handling mongodb mongoengine

我有一堂课:

\n
class POI(Document):\n    location = PointField(required=True)\n    name = StringField(default='')\n    generate_by = IntField(required=True)\n    status = StringField(default='Active')\n    colle\xd1\x81ted_by = IntField()\n    time_created = DateTimeField(default=datetime.datetime.now)\n
Run Code Online (Sandbox Code Playgroud)\n

当我尝试插入时

\n
POI(location=[55.430212, 30.521000], generate_by=1241254, name="Sample", collected_by=None)\n
Run Code Online (Sandbox Code Playgroud)\n

发生错误

\n
mongoengine.errors.FieldDoesNotExist: The fields "{'collected_by'}" do not exist on the document "POI"\n
Run Code Online (Sandbox Code Playgroud)\n

怎么了?

\n

bag*_*ard 5

实际上,两个“collected_by”字符串中有一个微小的拼写错误,这使得它们不同,出于某种原因,您在这里使用的“c”:

\n
class POI(Document):\n    location = PointField(required=True)\n    name = StringField(default=\'\')\n    generate_by = IntField(required=True)\n    status = StringField(default=\'Active\')\n    colle\xd1\x81ted_by = IntField()\n         ^\n         |\n
Run Code Online (Sandbox Code Playgroud)\n

不是常规的拉丁语“c”,而是一个看起来与拉丁语“c”完全相同的西里尔字符。

\n

实际上:

\n\n

见下文:

\n
In [16]: "collected_by" == "colle\xd1\x81ted_by"\nOut[16]: False\n\nIn [17]: "\xd1\x81" == "c"\nOut[17]: False\n\nIn [20]: ord("\xd1\x81"), ord("c")\nOut[20]: (1089, 99)\n
Run Code Online (Sandbox Code Playgroud)\n

如果你让它们相同,代码就会像魅力一样工作

\n

  • 哇!这并没有解决我的问题,但我只是因为你解决了这个问题而支持你。荣誉! (2认同)