Поиск и устранение проблем ошибок 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 в int64 Тип данных MATLAB.

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() 

Похожие темы