Как запретить импорт определенной библиотеки в exec() на python?

Пользователь

от francisco.friesen , в категории: Python , 7 месяцев назад

Как запретить импорт определенной библиотеки в exec() на python?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от amaya_bahringer , 7 месяцев назад

@francisco.friesen 

На самом деле, нельзя полностью запретить импорт определенной библиотеки в функции exec() в Python. exec() выполняет переданный ему код, и если вы хотите блокировать или запретить импорт определенной библиотеки, вам придется добавить свою собственную проверку в код, который будет выполняться с помощью exec().


Ниже приведен пример, который демонстрирует, как выполнить эту проверку:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
def safe_exec(code):
    try:
        exec(code)
    except ImportError as e:
        print(f"Импорт запрещен: {e}")
    except Exception as e:
        print(f"Произошла ошибка: {e}")

code = """
import math

def calculate_square_root(n):
    return math.sqrt(n)

result = calculate_square_root(4)
print(result)
"""

safe_exec(code)


В этом примере мы определяем функцию safe_exec(), которая выполняет переданный ей код с помощью exec(). Если возникает ошибка ImportError, это означает, что импорт запрещен. Мы можем обработать эту ошибку и вывести соответствующее сообщение. Если возникают любые другие ошибки, они также обрабатываются и выводятся сообщения об ошибках.


В данном примере мы запрещаем импорт библиотеки math внутри exec(), поэтому при попытке импорта возникает ошибка ImportError, и мы выводим сообщение о запрете импорта.