2013-04-14 5 views
0

Я использую приложение Flask/SqlAlchemy с API календаря Google. По сути, я создаю базу данных событий. Вот класс урезанную сниппет:Сравнение даты на Python вызывает неожиданную ошибку

# Flask. We just need the basic stuff in this common moduel 
from flask import Flask 

# flask SQLAlchemy 
from flask.ext.sqlalchemy import SQLAlchemy 

# Sort 
from sqlalchemy import desc,asc,and_ 

# Datetime 
from datetime import datetime, date 



class FlyingEvent(db.Model): 
    # Event Data 
    event_id = db.Column(db.Text, primary_key=True) 
    updated_datetime = db.Column(db.DateTime) 
    start_date = db.Column(db.DateTime) 
    end_date = db.Column(db.DateTime) 
    status = db.Column(db.Text) 
    creator_email = db.Column(db.Text) 
    summary = db.Column(db.Text) 
    description = db.Column(db.Text) 

    # Flying-specific entries 
    flying = db.Column(db.Boolean) 
    tach_start = db.Column(db.Float) 
    tach_end = db.Column(db.Float) 


def extract_hours(): 
     def get_digits(line): 
      if re.compare('[\d\.]+', line): 
      return line 
      else: 
      return None 
     try: 
      right_now=date.today() 
      if self.flying and self.end_date.date() < right_now: 
      lines = self.description.split('\n') 
      self.tach_start = get_digits(lines[0]) 
      self.tach_end = get_digits(lines[1]) 
     except Exception as e: 
      raise Exception('%r, Could not parse tach %r %r' % (e, self, 
       right_now)) 

Это вызывает исключение (я ререйз с предст объекта):

Exception: AttributeError("'module' object has no attribute 'compare'",), Could not parse tach { "event_id": u'go8bl9i615f7e7qljuoun9bqgk', "update_datetime": datetime.datetime(2013, 4, 12, 23, 58, 54, 371000), "start_date": datetime.datetime(2013, 4, 4, 0, 0), "end_date": datetime.datetime(2013, 4, 5, 0, 0), "status": u'confirmed',  "creator_email": u'[email protected]', "summary": u'jordan 10.6 to 10.9', "description": u'1010.7\n1010.9', "flying": True, "tach_start": 1010.7, "tach_end": 1010.9} datetime.date(2013, 4, 14) 

Мне кажется, что self.end_date является объектом DateTime (который я беру .date()), а right_now - datetime.date().

Что мне не хватает?

+0

Пожалуйста, удалите свой собственный обработчик исключений и показать нам полный отслеживающий первоначального исключения. –

ответ

2

Вы используете re.compare, который не является функцией обеспечивается re модулем.

Возможно, вы хотели бы использовать вместо этогоили re.match()? Или вы могли бы просто использовать float() и получить фактическое значение с плавающей точкой для tach_start и tach_end столбцов:

def get_digits(line): 
    try: 
     return float(line) 
    except ValueError: 
     return None 
+0

Hah! Ты прав. Я предположил, что это связано с сравнением ... все имеет смысл сейчас. – clearf

+0

Ваше использование одеяла, кроме обработчика, здесь не помогло; ваша трассировка скажет вам, что исключение было выбрано внутри функции 'get_digits()', например. –

+0

Это тоже замечательный момент, спасибо. – clearf

2

У вас возникла эта ошибка с re модуль не имеет функции compare. Я думаю, вы имели в виду re.match:

if re.match('[\d\.]+', line): 
+0

Это часть того, почему я так люблю, особенно как начинающий программист. Это похоже на талантливого коллегу, который сидит рядом с вами. Большое спасибо. – clearf

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