powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python Eval, как вызвать исключение при попытке вычисления с недопустимым параметром
10 сообщений из 10, страница 1 из 1
Python Eval, как вызвать исключение при попытке вычисления с недопустимым параметром
    #38915033
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем

я в eval() выполняю определённые действия заданные пользователем

eval(s,dic)

1. в dic очень много переменных и пользователь может написать в расчёте любую из них
2. в программе некоторые величины приняты за отсутствующие значения, н-р -777.0

подскажите кто знает как заставить eval при попытке использовать эти значения для расчёта вызвать исключение?
т.е. я хочу переопределить GetKeyValue у dic
...
Рейтинг: 0 / 0
Python Eval, как вызвать исключение при попытке вычисления с недопустимым параметром
    #38915859
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пока остановился вот на таком варианте
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
class NullError(Exception):
    def __init__(self,value):
        self.value = value
    def __str__(self):
        return repr(self.value)

class SomeDict(dict):
    def __init__(self,dic):
        self.gg=dic
    def __getitem__(self, key):
        v=self.gg[key]
        if v==-9999:
            raise NullError(key)
        return v
    def __len__(self):
        return len(self.gg)
    def __contains__(self, item):
        return item in self.gg
def TEval(ss,dic):
    try:
        return eval(ss,globals(),SomeDict(dic))
    except NullError:
        return -9999
...
Рейтинг: 0 / 0
Python Eval, как вызвать исключение при попытке вычисления с недопустимым параметром
    #38916032
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опишите всю задачу, сильно сомневаюсь в необходимости применять eval.
...
Рейтинг: 0 / 0
Python Eval, как вызвать исключение при попытке вычисления с недопустимым параметром
    #38916457
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHook,
в чужой проге можно записать строчку, которая выполняется много раз с различными данными, до цикла код вписать нельзя
можно настроить диалог, вот в нём я решил что юзеры будут писать формулы
бывает что данные некоторые невалидные (отсутствующие), что бы не заморачивать пользователя с проверками на их присутствие в данных вот такая фигня и понадобилась


PS:это не всё решение, ещё буферизацию добавил что бы строка каждый раз не компилировалась
...
Рейтинг: 0 / 0
Python Eval, как вызвать исключение при попытке вычисления с недопустимым параметром
    #38916725
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что, пользовательских данных в виде, скажем, JSON недостаточно для решения задачи?
...
Рейтинг: 0 / 0
Python Eval, как вызвать исключение при попытке вычисления с недопустимым параметром
    #38916921
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHook,
а писать их кто будет эти пользовательские данные? (их очень много, на каждый "предмет" свои формулы)
...
Рейтинг: 0 / 0
Python Eval, как вызвать исключение при попытке вычисления с недопустимым параметром
    #38916926
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

А что, если в этом коде будет удаление всех директорий и файлов из home директории юзера, у которого этот код выполняется?

Вообще eval -- это слишком опасная штука, и подсовывать туда то, что приходит от пользователя, очень неразумно с точки зрения безопасности. Эдакая питон-инъекция.

Хотите лишь формулы -- напишите простенький парсер. Это типичная олимпиадная задачка.
...
Рейтинг: 0 / 0
Python Eval, как вызвать исключение при попытке вычисления с недопустимым параметром
    #38917022
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekZ,
это десктоп-приложение, которое использует питон как интерпретатор для расчётов
зачем юзеру писать что то левое, он это и так может сделать без всякого питона
...
Рейтинг: 0 / 0
Python Eval, как вызвать исключение при попытке вычисления с недопустимым параметром
    #38917524
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

Не, ну это, конечно, клёво, но всё-таки не совсем профессионально, дать возможность пользователю выстрелить себе в ногу.
...
Рейтинг: 0 / 0
Python Eval, как вызвать исключение при попытке вычисления с недопустимым параметром
    #38917776
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekZ,
не вижу смысла им (создателям) напрягаться, для десктопа это нормально
а пользователи и так могут какой угодно код писать, я всего лишь пытаюсь их от этого уберечь как можно больше
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python Eval, как вызвать исключение при попытке вычисления с недопустимым параметром
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]