Диагностируйте ошибки MATLAB в Python

Ошибки MATLAB в Python

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

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

MatlabExecutionError: неопределенная функция

Вызовите 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

SyntaxError: недопустимое выражение Target

Можно вызвать 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() 

Похожие темы