2016-12-07 5 views
3

У меня есть основное приложение-парсер, который я создаю в Python. Я наблюдаю за папкой и импортирует файлы, когда они там отбрасываются. У меня есть MongoDB, к которому я пытаюсь сохранить импорт. Там почти ничего. Проблема возникает, когда я пытаюсь включить один из моих файлов class/mongo-document. Я уверен, что это простая проблема синтаксиса, которую я не понимаю. У меня установлены все мои требования, и я запускаю это в виртуальном env. Это мое первое приложение для python, хотя, скорее всего, я этого не вижу.Ошибка при попытке импорта между файлами 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() 

requirements.txt

mongoengine 
hl7 

parser.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") 

Если я не включаю класс hl7message в parser.py он работает нормально, но как только я включил его, я получаю сообщение об ошибке, так что я уверен, что у него есть что-то для этого файла. Сообщение об ошибке, однако, не полезно. Я не знаю, попал ли я в какой-то замкнутый цикл или что-то в этом роде.

К сожалению, трассировки стека ниже

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' 
+0

Каков точный текст ошибки? – rassar

+1

У вас есть файл '__init__'? –

+0

@rassar К сожалению, я добавил трассировку стека – Jhorra

ответ

2

Это круговое вопрос импорта. Application.py импортирует парсер, который импортирует h17, который импортирует h17message, который импортирует приложение, которое запускает processimports, прежде чем весь код модуля парсера будет запущен.

Мне кажется, что служебные модули не должны импортировать приложение. Вы можете создать новый модуль common.py, содержащий строку db = connect('testdb'), и импортировать db из общего как в application.py, так и в h17message.

+0

Я сделаю снимок. У меня было ощущение, что это возможно. – Jhorra

+0

Это похоже. Перенос его в файл database.py исправил эту ошибку. Теперь я получаю новый, но, похоже, он связан с mongoengine. – Jhorra

 Смежные вопросы

  • Нет связанных вопросов^_^