Как поймать исключение Java из кода MATLAB
Когда я звоню myFunction(test)
это идет правильно, но выдает исключение Java
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
и я хотел бы поймать его и / или поймать любое исключение Java.
Я старался:
try
myFunction(test)
catch exp
mess = exp.message
end
но mess
пусто... как я могу это проверить myFunction
не ловит никаких исключений Java?
2 ответа
Любой из нижеперечисленных можно использовать
Вместо "exp" используйте ME, это переменная MATLABException, которая фактически перехватывает и хранит в сообщении
используйте "ОШИБКА" вместо "exp", а затем отобразите сообщение непосредственно в командном окне MATLAB
Возможность доступа к исключениям Java из MATLAB была добавлена в R2012b. Если я не ошибаюсь, предыдущие версии могли перехватывать исключения только общим способом без конкретной информации об ошибке Java.
Пример (проверено на R2014a):
try
openStream(java.net.URL('http://non.existant'))
catch ME
end
Пойманное исключение - объект MATLAB, который оборачивает исходное исключение Java:
>> ME
ME =
JavaException with properties:
ExceptionObject: [1x1 java.net.UnknownHostException]
identifier: 'MATLAB:Java:GenericException'
message: 'Java exception occurred:
java.net.UnknownHostException: non.existant
at java.net.AbstractPlainSocketImpl.connect(Unk...'
cause: {}
stack: [0x1 struct]
так что мы можем получить доступ ко всей трассировке стека ошибок:
>> printStackTrace(ME.ExceptionObject)
java.net.UnknownHostException: non.existant
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)