¿Por qué no funciona agregar pepinillos binarios?

Sé que esto no es exactamente cómo se pretendía utilizar el módulo de pickle, pero habría pensado que esto funcionaría. Estoy usando Python 3.1.2

Aquí está el código de fondo:

import pickle

FILEPATH='/tmp/tempfile'

class HistoryFile():
    """
    Persistent store of a history file  
    Each line should be a separate Python object
    Usually, pickle is used to make a file for each object,
        but here, I'm trying to use the append mode of writing a file to store a sequence
    """

    def validate(self, obj):
        """
        Returns whether or not obj is the right Pythonic object
        """
        return True

    def add(self, obj):
        if self.validate(obj):
            with open(FILEPATH, mode='ba') as f:    # appending, not writing
                f.write(pickle.dumps(obj))
        else:
            raise "Did not validate"

    def unpack(self):
        """
        Go through each line in the file and put each python object
        into a list, which is returned
        """
        lst = []
        with open(FILEPATH, mode='br') as f:
            # problem must be here, does it not step through the file?
            for l in f:
                lst.append(pickle.loads(l))
        return lst

Ahora, cuando lo ejecuto, solo imprime el primer objeto que se pasa a la clase.

if __name__ == '__main__':

    L = HistoryFile()
    L.add('a')
    L.add('dfsdfs')
    L.add(['dfdkfjdf', 'errree', 'cvcvcxvx'])

    print(L.unpack())       # only prints the first item, 'a'!

¿Es esto porque está viendo un EOF temprano? ¿Quizás el apéndice está destinado solo para ascii? (en cuyo caso, ¿por qué me permite hacer mode = 'ba'?) ¿Hay una manera mucho más simple de hacer esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta