¿Cómo extender la funcionalidad `getter` del asociación_proxy de SQLAlchemy?

Editar Me gustaría modelar una1 to 0:1 relación entreUser yComment (un usuario puede tener cero o un comentario). En lugar de acceder al objetoComment Prefiero acceder directamente al comentario en sí. Usando SQLAlchemysassociation_proxy funciona perfecto para ese escenarioexcept para una cosa: acceder aUser.comment antes de tener unComment asociado. Pero en este caso preferiría esperarNone en lugar deAttributeError como resultado

Mira el siguiente ejemplo

import sqlalchemy as sa
import sqlalchemy.orm as orm
from sqlalchemy import Column, Integer, Text, ForeignKey, Table
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.associationproxy import association_proxy

Base = declarative_base()

class User(Base):
  __tablename__ = 'users'
  id = Column(Integer, primary_key=True)
  name = Column(Text)

  def __init__(self, name):
      self.name = name

  # proxy the 'comment' attribute from the 'comment_object' relationship
  comment = association_proxy('comment_object', 'comment')


class Comment(Base):
  __tablename__ = 'comments'
  id = Column(Integer, primary_key=True)
  comment = Column('comment', Text, nullable=False, default="")
  user_id = Column(ForeignKey('users.id'), nullable=False, unique=True)
  # user_id has to be unique to ensure that a User can not have more than one comments

  def __init__(self, comment):
      self.comment = comment

  user_object = orm.relationship(
      "User",
      uselist=False, # added after edditing the question
      backref=orm.backref('comment_object', uselist=False)
      )

if __name__ == "__main__":
  engine = sa.create_engine('sqlite:///:memory:', echo=True)
  Session = orm.sessionmaker(bind=engine)
  Base.metadata.create_all(engine)
  session = Session()

Ahora, el siguiente código arroja unAttributeError:

u = User(name="Max Mueller")
print u.comment

Cuál sería la mejor manera de detectar esa excepción y proporcionar un valor predeterminado en su lugar (como una cadena vacía)?

Respuestas a la pregunta(4)

Su respuesta a la pregunta