Cobra/Keywords/try
Try/Catch
правитьtry/catch состоит из блока try, за которым следует одно или несколько предложений catch, в которых определяются обработчики для различных исключений.
Исключения могут быть указаны одним из трех способов:
- поймать и захватить исключение, например, для использования в соответствующем блоке catch.
- поймать исключение типа игнорируя реальный экземпляр
- перехвата любого типа исключения, такой подход не рекомендуется
Блок success является необязательным и если он указан выполняется, только если не произошло исключения.
Блок finally выполняется после выполнения кода из блока try, независимо от того, происходит ли передача управления в результате нормальной работы, вызова операторa break, continue, return, или появления исключения в блоке try. В рамках обработки исключений, связанный блок finally гарантированно будет выполнен.
Блок finally полезен для очистки ресурсов, выбранных в блоке try, и для выполнения любого кода, который должен выполняться даже при возникновении исключения в блоке try.
Синтаксис
править
try
<statements>
catch <VarName> as <exceptionType> (*1) or
catch <exceptionType> (*2) or
catch (*3)
<statements>
[success (*4)
<statements> ]
[finally (*4)
<statements> ]
- 1 - указывает переменную для размещения обработки исключение (или возобновления исключения) в последующих catch блоков
- 2 - используйте эту форму, чтобы поймать исключение ExceptionType, когда не нуждаетесь в обработке исключения (чтобы проигнорировать исключение или выход).
- 3 - получить любое и все исключения. Может быть указан только один раз и если используется, то должен быть указан после всех других блоков.
- 4 - не обязательно
Пример
править
# parsing numbers
s = tok.text.replace('_', '')
if s.endsWith('f')
s = s[:-1]
try
value = float.parse(s, Utils.cultureInfoForNumbers)
catch FormatException
.recordError('Unexpected FormatException for float literal "[tok.text]".')
catch OverflowException
.recordError('Range overflow for float literal "[tok.text]".')
# reading file contents
contents = 'test: failure'
try
contents = File.readAllText('myFile.txt')
catch ioe as IOException
print 'I/O Error: [ioe.message]'
success
assert 'test' in contents
# customException
try
if source.length==0
_warning('File is empty.')
else if source.trim.length==0
_warning('File is completely blank.')
return _parseTokens()
catch pe as ParserException
if _errorRecorder, _errorRecorder.recordError(pe)
_tokenizer = nil
throw # rethrow exception trapped above