Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6

Exec и кодировки

11.08.2015, 09:41. Показов 1949. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем трям.
Проблема такова. Выполняю скрипт через exec:
Python
1
exec code in {'maps': maps}
maps - словарь, в котором ключи могут содержать русские буквы.
Скрипт юникодный. Пример строки скрипта, выведенной через отладку:
Python
1
u"maps['N\u0442\u0440\u0430\u043cN'] = maps['\u041d\u0425 3-4_bottom'] + maps['\u041d\u0425 3-4_bottom1']"
Тем не менее, команда exec воспринимает его как ascii и ругается:
Code
1
KeyError: '\xd0\x9d\xd0\xa5 3-4_bottom'
Поясняю: там вначале две русские буквы, юникодные двухбайтные, а он их трактует, как 4.

Пытался поиграть с encode-decode - не получилось. На указание "# -*- coding: utf-8 -*-" в начале скрипта выдаёт особую ругань - не хочет он, чтобы у юникодной строки-скрипта указывали кодировку.

В инете смотрел, подобные проблемы народ обсуждает, но применить к моему случаю - не получилось.
Что делать, куды бечь?

Добавлено через 1 час 32 минуты
Да, работаю на винде.

Сделал костыль (для винды).

1. Ключи в словарь кодирую cp1251.
2. Скрипт кодирую так же.
3. После выполнения скрипта ключи из словаря декодирую обратно.

Работает, но
Так что нормальное решение всё ещё интересует.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.08.2015, 09:41
Ответы с готовыми решениями:

Ошибка in execfile exec(compile(contents+"\n", file, 'exec'), glob, loc)
Traceback (most recent call last): File "<input>", line 1, in <module> File "C:\Program Files\JetBrains\PyCharm...

Кодировки, класс Encoding. Преобразования текстовых файлов из одной кодировки в другую
Вот сама задача: * Написать программу преобразования текстовых файлов из одной кодировки в другую. * Программа должна...

В чём отличия кодировки ms dos от кодировки ms windows?
Всем привет, подскажите в чём отличия кодировки ms dos от кодировки ms windows?

12
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
11.08.2015, 19:16
Использовать eval и exac во 1 не безопасно, а во 2 от этого могут быть одни проблемы (занижение скорости выполнения кода, в некотрых ситуациях код вообще может не выполняться из-за них и т д), по этому я вообще не рекомендовал бы использовать эту функцию.
0
 Аватар для Zuzik
298 / 256 / 57
Регистрация: 11.06.2012
Сообщений: 1,557
11.08.2015, 20:36
Цитата Сообщение от alex925 Посмотреть сообщение
в некотрых ситуациях код вообще может не выполняться из-за них
Например?
Цитата Сообщение от alex925 Посмотреть сообщение
по этому я вообще не рекомендовал бы использовать эту функцию.
В моей небольшой, крайне небольшой практике случалось пару случаев когда использование данных функций ( к слову, касается не только питона) сокращало в несколько раз размер кода который нужно было написать, делало его гораздо более простым для понимания. Но как вы и сказали - ее использование не безопасно, так что нужно за этим очень внимательно следить, либо использовать ее в тех случаях когда "она не сможет навредить"
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
11.08.2015, 21:53
Цитата Сообщение от Zuzik Посмотреть сообщение
Например?
вот видео с одной из конф. по python https://www.youtube.com/watch?v=4CsOOfdoU2A, там парень наглядно показывает какие проблемы выплывают из-за использования этих функций.

Цитата Сообщение от Zuzik Посмотреть сообщение
сокращало в несколько раз размер кода
Короткий путь не значит хороший и правильный. Самый короткий путь с крыши, это прыгнуть с неё, но этот путь очевидно опасный и понесёт негативные последствия.

Цитата Сообщение от Zuzik Посмотреть сообщение
так что нужно за этим очень внимательно следить, либо использовать ее в тех случаях когда "она не сможет навредить"
Посмотри видео и поймёшь, что самый лучших выход это просто забыть о существовании этих функций.
1
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
12.08.2015, 07:07  [ТС]
Цитата Сообщение от alex925 Посмотреть сообщение
Использовать eval и exac во 1 не безопасно, а во 2 от этого могут быть одни проблемы (занижение скорости выполнения кода, в некотрых ситуациях код вообще может не выполняться из-за них и т д), по этому я вообще не рекомендовал бы использовать эту функцию.
Требуется дать пользователю самому рулить с данными, тут ничего не попишешь. Контекст выполнения мы задаём сами, глобалки не трогаем, так что ничего страшного.

По поводу eval - я в курсе, что есть безопасная замена, работающая только с элементарными типами.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
12.08.2015, 11:57
Цитата Сообщение от dondublon Посмотреть сообщение
Требуется дать пользователю самому рулить с данными
А можешь по подробней рассказать про задачу?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
12.08.2015, 12:20  [ТС]
alex925, в программе имеется множество карт.
С ними пользвателю может понадобится делать некоторые действия, как-то - 4 арифметических действия, приведение размеров (сетка может быть разной), сохранить карту в проект (присвоение).
Сравнение с некоторым значением, присвоение по бинарному индексу (то, что так ловко делает numpy)

Любезность за любезность. Чем опасен мой запуск exec?
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
12.08.2015, 12:22
Цитата Сообщение от dondublon Посмотреть сообщение
Любезность за любезность. Чем опасен мой запуск exec?
Видео, ссылку на которое я скинул смотрел?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
12.08.2015, 12:33  [ТС]
alex925, нет, я тут не могу видео посмотреть, да и звука нет.
Был бы признателен за текст.

Добавлено через 9 минут
alex925, прочитал вот эту статью
"Be careful with exec and eval in Python"
http://lucumr.pocoo.org/2011/2/1/exec-in-python/

Показывается опасность, что можно запортить глобальный контекст. Ну так я его не трогаю.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
12.08.2015, 12:35
dondublon, В этом видео рассматривается оптимизация приложения и там наглядно показано, как exec и eval замедляют работу программу + из-за exec при использовании pypy, код вообще будет работать бесконечно (в прямом смысле слова)
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
12.08.2015, 12:57  [ТС]
Не, быстродействие тут не критично.
Что, кстати, ожидаемо - такие участки в eval не помещают. А циклы всё равно всё внутри numpy. Так что всё пучком.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
12.08.2015, 13:02
Ну моё дело предупредить, а дальше делай как знаешь. Вообще сколько ситуаций я не встречал, везде можно было элегантно переписать код без этих функций.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
12.08.2015, 13:18  [ТС]
Что значит "переписать код"? Мы же не знаем, какой код понадобится.

Потому и существуют собственные скриптовые возможности в разных программах. VBA, в Автокаде тоже Питон, кажись, and so on.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.08.2015, 13:18
Помогаю со студенческими работами здесь

Кодировки (ошибки кодировки) в логировании
Здравствуйте. Работаю с WINAPI и оттуда нормально приходят наименования на русском. Вот решил логирование организовать и на этом повалился...

exec
Создаю новый процес и открываю программу execl("./dauther",NULL,NULL); , обьясните пожалусто как передать в эту программу переменные и...

exec и ps
Подскажите, пожалуйста, как при помощи одной из exec-функций выполнить команду "ps >> file1". Как только не пробовал, не...

exec()
Добрый день. Есть такая строчка: exec("php export.php >>script.log 2>&1 &"); Такой вопрос. Нужно, чтобы скрипт работал пока не...

Exec As
Добрый день! Поделитесь опытом... Есть база данных DB1 и в ней есть процедура SP1, которую запускает внешняя прога C# которая и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru