exponenta event banner

Устранение неполадок MATLAB в Python

Ошибки MATLAB в Python

Когда функция MATLAB ® вызывает ошибку, механизм MATLAB для Python ® останавливает функцию и перехватывает исключение, вызванное MATLAB. Модуль копирует сообщение об ошибке в новое исключение Python. Двигатель поднимает исключение Python.

Если интерпретатор Python перехватывает исключение, интерпретатор отображает сообщение об ошибке, поступившее из MATLAB. Кроме того, в коде Python можно обрабатывать исключения, созданные обработчиком. См. раздел matlab.engine.MatlabEngine и matlab.engine.FutureResult справочные страницы для типов исключений, которые может создать механизм.

Ошибка MatlabExecureError: неопределенная функция

Вызовите MATLAB sqrt функция для целого числа из Python. (Этот пример кода пропускает трассировку Python и отображает только сообщение об ошибке.)

import matlab.engine
eng = matlab.engine.start_matlab()
print(eng.sqrt(4))
matlab.engine.MatlabExecutionError: Undefined function 'sqrt' for input arguments of type 'int64'.

MATLAB определяет sqrt функция, но ожидает, что входной аргумент имеет тип данных double, а не целое число. Однако входной аргумент равен 4, и перед передачей в MATLAB Python интерпретирует 4 как целое число. Движок преобразует целое число Python в int64 Тип данных MATLAB.

MATLAB и Python определяют различные типы по умолчанию для чисел. Если ввести x = 4 в командной строке MATLAB, x является MATLAB double. Если ввести x = 4 в командной строке Python, x является Python int.

Чтобы избежать этой ошибки, укажите входные аргументы типа данных Python float. Модуль преобразует этот тип в MATLAB double.

print(eng.sqrt(4.0))
2.0

Ошибка синхронизации: Выражение недопустимо целевое значение

Можно вызвать MATLAB eval функция из Python для создания переменных MATLAB. (Этот пример кода пропускает трассировку Python и отображает только сообщение об ошибке.)

import matlab.engine
eng = matlab.engine.start_matlab()
eng.eval("x = 4;")
SyntaxError: Error: The expression to the left of the equals sign is not a 
valid target for an assignment.

При вызове модуля eval, передает инструкцию в MATLAB для выполнения. Если не указан входной аргумент nargout входной аргумент, модуль ожидает один выходной аргумент. Однако эта инструкция MATLAB не возвращает выходные аргументы.

Чтобы избежать этой ошибки, укажите nargout как 0 всякий раз, когда вызываемая функция MATLAB не возвращает выходные аргументы.

eng.eval("x = 4;",nargout=0)

Ошибка синхронизации: недопустимый синтаксис

Вызовите MATLAB print функция из Python 2.7 для печати графика, созданного с помощью MATLAB surf функция.

import matlab.engine
eng = matlab.engine.start_matlab()
eng.eval("surf(peaks)",nargout=0)
eng.print("-djpeg","surf",nargout=0)
  File "<stdin>", line 1
    eng.print("-djpeg","surf",nargout=0)
            ^
SyntaxError: invalid syntax

Если функции MATLAB и Python имеют одинаковые имена, то механизм вызывает функцию MATLAB.

Однако обработчик не может напрямую вызвать функцию MATLAB с именем, которое также является зарезервированным словом в языке Python. Например, в Python 2.7, print является зарезервированным словом. (В Python 3.x предыдущий код запускается, поскольку print является встроенной функцией, а не зарезервированным словом.)

Чтобы избежать этой ошибки, вызовите функцию MATLAB с помощью eval.

eng.eval("print('-djpeg','surf');",nargout=0)

Если функция MATLAB является созданной функцией, ее можно переименовать так, чтобы ее имя больше не было зарезервированным словом Python. В документации Python перечислены зарезервированные слова:

Не удается найти сеанс MATLAB в Python

При переопределении операционной системы TEMP или TMP переменные среды в MATLAB, Python может быть не в состоянии подключиться к MATLAB Engine для Python. Например, если в подсказке Python ввести следующее:

matlab.engine.find_matlab()

Дисплеи Python ().

Модуль MATLAB Engine for Python использует временную папку для записи информации об общих сеансах MATLAB. Чтобы обойти эту проблему, внесите следующие изменения в переменные среды в Python. temp_folder путь к папке, заданной в MATLAB.

os.environ['TMP'] = r'temp_folder'
os.environ['TEMP'] = r'temp_folder'
eng=matlab.engine.find_matlab() 

Связанные темы