Почему exec () не создает объекты в локальной/глобальной области?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему exec () не создает объекты в локальной/глобальной области?

Сообщение Anonymous »

Я пытаюсь найти аналог ipython для Spyder's Runfile . Согласно этой странице, «exec () по умолчанию выполнит входной код в текущей области». Поэтому я ожидаю, что следующее создаст объекты testfunc и doggy в текущей области:

Код: Выделить всё

# Script.py
#----------
def TestFunc():
printf("I am TestFunc.")
Doggy = "Doggy"
< /code>
для «источника» кода из Ipython Repl, я нашел следующую функцию из этого урока, которую я вставляю в Repl: < /p>
def execute_python_file_with_exec(file_path):
try:
with open(file_path, 'r') as file:
code = file.read()
exec(code)
except FileNotFoundError:
print(f"Error: The file '{file_path}' does not exist.")
except Exception as e:
print(f"An error occurred: {e}")
Я затем использую его для запуска script.py и запросить локальное и глобальное пространство имен:

Код: Выделить всё

execute_python_file_with_exec('Script.py')

print("Locals:")
for item in dir():
print(  item, end=", " )

print("Globals:")
for item in globals():
print(  item, end=", " )
Ни одно из пространств имен не содержит testfunc или doggy .

Код: Выделить всё

Locals:
In, Out, _, _2, _5, _6, __, ___, __builtin__,
__builtins__, __doc__, __loader__, __name__,
__package__, __spec__, _dh, _i, _i1, _i2, _i3,
_i4, _i5, _i6, _i7, _i8, _ih, _ii, _iii, _oh,
execute_python_file_with_exec, exit,
get_ipython, item, open,

Globals:
__name__, __doc__, __package__, __loader__,
__spec__, __builtin__, __builtins__, _ih, _oh,
_dh, In, Out, get_ipython, exit, quit, open,
_, __, ___, _i, _ii, _iii, _i1,
execute_python_file_with_exec, _i2, _2, _i3,
_i4, _i5, _5, _i6, _6, _i7, item, _i8, _i9, In
[10]:
Что я недопонимаю в exec () ? Команда %run работает только из подсказки ipython, но я также пытаюсь заменить использование Runfile в сценариях. Если я вызываю сценарий, используя %run из подсказки ipython, и сценарий также содержит %run , он помечен как ошибка.
Я также исключил импорт , подпроцесс и os.system () , но это начинает дриффовать из темы моего вопроса. Для тех, кто заинтересован, я описываю проблемы с этими командами. Кроме того, альтернатива не требует большого количества занятости (например, RunFile ). Я понимаю, что я желаю Луны - надеюсь, что она существует, но подготовлен к вероятности, что это не так. В отличие от Globals () , однако, локалы () возвращает только копию локальных переменных. Следовательно, script script.py не сможет добавить объекты в этот объем. Фактически, этот ответ подтверждает @Jasonharper's объяснение, что локальные переменные определяются во время компиляции и, следовательно, не могут быть добавлены в.

Подробнее здесь: https://stackoverflow.com/questions/796 ... obal-scope
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему exec () не создает объекты в локальной/глобальной области?
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Почему exec () не создает объекты в локальной/глобальной области?
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Почему exec () не создает объекты в локальной/глобальной области?
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Php exec внутри exec/вложенный exec
    Anonymous » » в форуме Php
    0 Ответы
    67 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между объявлением массивов переменных в глобальной и локальной области (внутри метода), когда они находятс
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»