Поиск и устранение проблем ошибок MATLAB в Python

Ошибки MATLAB в Python

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

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

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

Вызовите функцию sqrt MATLAB на целом числе из 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 в тип данных MATLAB int64.

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

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

print(eng.sqrt(4.0))
2.0

SyntaxError: Выражение не допустимая цель

Можно вызвать функцию eval MATLAB из 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)

SyntaxError: Недопустимый синтаксис

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

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 для Python использует временную папку, чтобы записать информацию для разделяемых сеансов работы с MATLAB. Чтобы работать вокруг этой проблемы, внесите следующие изменения в переменные окружения в Python. temp_folder является путем к папке, которую вы устанавливаете в MATLAB.

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

Похожие темы