что-то не так с Python Shell (Google App)? - PullRequest
5 голосов
/ 08 января 2010

Python Shell - shell.appspot.com ведет себя странно? или я что-то упустил?

Google App Engine/1.3.0
Python 2.5.2 (r252:60911, Apr  7 2009, 17:42:26) 
[GCC 4.1.0]

>>> mycolors = ['red','green','blue']
>>> mycolors.append('black')
>>> print mycolors
['red', 'green', 'blue']

Но ожидается следующий результат

['red', 'green', 'blue', 'black']

И то же самое с типом данных словаря.

Спасибо

Абхинай

Ответы [ 2 ]

4 голосов
/ 09 января 2010

Краткий ответ

Это известная ошибка.Краткий ответ:

  • Включите все в одну строку: mycolors.append('black'); print mycolors
  • Используйте мой бесплатный программный инструмент, Консоль App Engine .Мой код получен из оболочки, и я исправил эту ошибку.

Длинный ответ

Ошибка заключается в том, как состояние сохраняется между каждой вводимой вами командой.Веб-запросы не имеют состояния и только запрос / ответ;однако оболочка (и мое консольное приложение) должны ощущаться как поток сознания, как в традиционной подсказке Python.

Реализация примерно такая:

  1. Получитьзапрос от браузера, который содержит строку для выполнения
  2. Подтвердите конкретный сеанс, в котором находится браузер.По сути, это модуль, аналогичный __main__ с некоторыми привязками переменных.
  3. Выполнение заданной строки кода в контексте этого модуля
  4. Сохранение состояния путем циклического перебора всех привязок переменных в контексте и...
    • Если переменная до сих пор не видна, сохраните ее имя и значение в хранилище данных
    • Если нет, игнорируйте ее. Вот ошибка.Вы должны на самом деле проверить, изменилась ли переменная.
1 голос
/ 08 января 2010

У меня похожие проблемы, поэтому я бы сказал, что происходит что-то странное.

>>> a = 2
>>> a += 3
>>> a
5
>>> b = [2]
>>> b += [3]
>>> b
[2]
>>> [2] + [3]
[2, 3]
>>> class Dave: pass
>>> d = Dave()
>>> d
<__main__.Dave instance at 0x6df2d063e08a98e8>
>>> d.a = 1
>>> d.a
Traceback (most recent call last):
  File "/base/data/home/apps/shell/1.335852500710379686/shell.py", line 267, in get
    exec compiled in statement_module.__dict__
  File "<string>", line 1, in <module>
AttributeError: Dave instance has no attribute 'a'

Похоже, об этой проблеме уже сообщалось: Проблема 29: Оболочка - сущности являются неизменяемыми в оболочке.К сожалению, есть ответ на зарегистрированную проблему.

...