gpt4 book ai didi

python - 尝试在 python 文件之间导入时出错

转载 作者:可可西里 更新时间:2023-11-01 09:39:24 25 4
gpt4 key购买 nike

我有一个用 Python 构建的基本解析器应用程序。我监视一个文件夹并在将文件放在那里时导入文件。我有一个 MongoDB,我正在尝试将导入保存到其中。几乎没有什么。当我尝试包含我的一个类/mongo 文档文件时,就会出现问题。我确定这是一个我不明白的简单语法问题。我已经安装了所有要求,并且在虚拟环境中运行它。不过,这是我的第一个 Python 应用程序,所以它可能是我没有看到的东西。

我的文件结构是

application.py
requirements.txt
__init__.py
-services
parser.py
__init__.py
-models
hl7message.py
__init__.py

这里是application.py

from mongoengine import connect
import os, os.path, time
from services import parser

db = connect('testdb')
dr = 'C:\\Imports\\Processed'

def processimports():
while True:
files = os.listdir(dr)
print(str(len(files)) + ' files found')
for f in files:
msg = open(dr + '\\' + f).read().replace('\n', '\r')
parser.parse_message(msg)

print('waiting')
time.sleep(10)

processimports()

需求.txt

mongoengine
hl7

解析器.py

import hl7
from models import hl7message

def parse_message(message):
m = hl7.parse(str(message))
h = hl7message()

hl7message.py

from utilities import common
from application import db
import mongoengine

class Hl7message(db.Document):
message_type = db.StringField(db_field="m_typ")
created = db.IntField(db_field="cr")
message = db.StringField(db_field="m")

如果我不在 parser.py 中包含 hl7message 类,它运行良好,但一旦我包含它,我就会收到错误,所以我确定它与该文件有关。错误消息虽然没有帮助。我不知道我是不是让自己陷入了某种包含循环之类的。

抱歉,堆栈跟踪在下面

Traceback (most recent call last):
File "C:/OneDrive/Dev/3/Importer/application.py", line 3, in <module>
from services import parser
File "C:\OneDrive\Dev\3\Importer\services\parser.py", line 2, in <module>
from models import hl7message
File "C:\OneDrive\Dev\3\Importer\models\hl7message.py", line 2, in <module>
from application import db
File "C:\OneDrive\Dev\3\Importer\application.py", line 23, in <module>
processimports()
File "C:\OneDrive\Dev\3\Importer\application.py", line 17, in processimports
parser.parse_message(msg)
AttributeError: module 'services.parser' has no attribute 'parse_message'

最佳答案

这是一个循环导入问题。 Application.py 导入解析器,导入 h17,导入 h17message,导入应用程序,在解析器模块的全部代码运行之前运行 processimports。

在我看来,服务模块不应该导入应用程序。您可以创建一个新模块 common.py,其中包含 db = connect('testdb') 行,并在 application.py 和 h17message 中从 common 导入 db。

关于python - 尝试在 python 文件之间导入时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41028260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com