Создайте некоторые if из списка строк / Python3

#python-3.x #list #if-statement

#python-3.x #Список #if-оператор

Вопрос:

Сначала извините за мой английский…

Мне нужна ваша помощь, чтобы исправить сложную. У меня есть скрипт на python для проверки некоторых параметров, с помощью этих параметров я проверяю некоторые условия, но я хотел бы добавить возможность для пользователя создать другую проверку из строки… Чтобы дать вам пример, я сохраню некоторые кодировки в строке, а затем разделю, чтобы получить имя проверки, предельное значение, задержку, условие (<,>, = …). И из этого списка (разделенная строка) Я хотел бы создать «значение If», «условие», «предельное значение», но я не нахожу, как записать это IF из моего списка.

 parameter="O2_alert,O2,0.015,<"

para1=parameter.split(',')   # ==> para1 =["O2_alert","O2","0.015","<"]
alert_name=para1[0]
value_name=para1[1]   # it's a name of a variable in my script not a value
limit_value=para1[2]
condition=para1[3]

#  And I woul like to have

if value_name condition limit_value :
  

Спасибо за вашу помощь.

Комментарии:

1. можете ли вы привести несколько примеров ввода и вывода, которые говорят лучше, чем на английском

2. Просто для пояснения: вы хотите преобразовать строку "O2_alert,O2,0.015,<" в оператор if O2 < 0.015: , правильно? Возможно ли для вас сохранить ваши данные в dict вместо переменных, чтобы вы могли запускать if data["O2"] < 0.015: ? Вашим пользователям доверяют или вам нужно защитить от вредоносного контента?

3. Да, я думал использовать dict, но как это сделать для «>»? Я добавлю некоторый фильтр, чтобы проверить, соответствует ли выражение или нет. Я помню, что видел решение для проверки, содержит ли строка специальные символы.

Ответ №1:

Вы можете использовать следующим образом,

 parameter="02_alert,2,0.015,<"

para1=parameter.split(',')   # ==> para1 =["02_alert","02","0.015","<"]
alert_name=para1[0]
value_name=para1[1]   # it's a name of a variable in my script no a value
limit_value=para1[2]
condition=para1[3]


if eval(f"{value_name} {condition} {limit_value}"):
    print('abcd')
  

Это работает для вас.

Комментарии:

1. О, спасибо!!! Вы нашли идеальное решение, и я пытаюсь найти его уже несколько дней…. Я учусь один, но Python — прекрасный язык, это идеальный инструмент.

2. Примечание: eval позволяет выполнять произвольный код. Не используйте if, пользователям не должно быть разрешено запускать вредоносный контент.

3. Да, я действительно прочитал документацию eval (), и она указана, но спасибо за эту инструкцию. Я добавлю какой-нибудь фильтр