#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 (), и она указана, но спасибо за эту инструкцию. Я добавлю какой-нибудь фильтр