Python-код получает MemoryError в sl4a - PullRequest
1 голос
/ 01 марта 2012

Я получил MemoryError, когда запускаю следующий код в sl4a на своем HTC Desire:

def load_words():
    print "Loading word list from file..."
    inFile = open(words.txt, 'r', 0)
    wordlist = []
    for line in inFile:
        wordlist.append(line.strip())
    print "  ", len(wordlist), "words loaded.\n"
    return wordlist

После печати «Загрузка списка слов из файла ...» выдается

Traceback (most recent call last):
    File "words.txt", line 92, in <module>
      wordlist = load_words()
    File "words.txt", line 29, in load_words
      for line in inFile:
MemoryError

Кстати, файл "words.txt" содержит 83667 английских слов, размер 633,6 КБ. Помощь приветствуется. (Код является частью MIT OpenCourseWare, CS 6.00 - введение в информатику и программирование, набор задач 5, ps5_ghost.py)

Возможно, это ошибка в sl4a?

[UPDATE]: Я попробовал следующее:

def load_words():
    print "Loading word list from file..."
    inFile = open(words.txt, 'r', 0)
    wordlist = []
    try:
        for line in inFile:
            wordlist.append(line.strip())
    except MemoryError:
        print 'Oops...'
    print "  ", len(wordlist), "words loaded.\n"
    return wordlist

Тогда волшебным образом я получил

Loading word list from file...
Oops...
  83667 words loaded.

А остальная часть кода работала нормально. Кто-нибудь знает, что вызвало это?

1 Ответ

0 голосов
/ 01 марта 2012

Ответы на этот вопрос ( Ошибка памяти из-за огромного размера входного файла ) могут помочь. Следующее адаптировано из ответа Тима на этот вопрос:

wordlist = []
with open("words.txt") as inFile:
    for line in inFile:
        wordlist.append(line.strip())

Кроме того, с точки зрения отладки вы можете удалить wordlist.append(line.strip()), чтобы попытаться определить, вызывает ли эта строка ошибку памяти или (что более вероятно) открыть каждую строку в файле.

...