Существует ли обработка исключений в Fortran?

есть ли какая-либо структура обработки исключений в Fortran, как и в Python?

try:
    print "Hello World"
except:
    print "This is an error message!"

если он не существует, каков был бы самый простой способ обработки исключений?

2 ответов


исключения как таковые не существуют в Fortran, поэтому нет, нет обработки исключений.

но вы можете сделать что - то похожее на обработку исключений, используя стандартный Fortran-на нем даже есть бумага Арьен Маркус,"обработка исключений в Fortran".

наиболее распространенным обозначением является использование (целочисленной) возвращаемой переменной, указывающей код ошибки:

subroutine do_something(stat)
    integer :: stat
    print "Hello World"
    stat = 0
end subroutine

а в основной программе делаем

call do_something(stat)
if (stat /= 0) print *,"This is an error message!"

есть и другие способы, описанные в статье, такие как определение выделенного производного типа для исключений, способных также хранить сообщение об ошибке. Пример, упомянутый там, который ближе всего к исключению, использует альтернативные возвращения для подпрограмм (невозможно с функциями, хотя):

subroutine do_something(stat, *)
    integer :: stat
    !...

    ! Some error occurred
    if (error) return 1
end subroutine

а в основной программе делаем

try: block
    call do_something(stat, *100)
    exit try ! Exit the try block in case of normal execution
100 continue ! Jump here in case of an error
    print *,"This is an error message!"
end block try

обратите внимание, что для построения блока требуется компилятор, совместимый с Fortran 2008.

Я никогда не видел ничего подобного это там, хотя:)


есть предложения (см. комментарий Стива Лайонела ниже), чтобы добавить обработку исключений к следующему стандарту Fortran. См. здесь, например:обработка исключений-BCS Fortran Specialist Group

Это, по-видимому, имеет долгую историю в Fortran (снова см. Второй комментарий Стива ниже)