Существует ли обработка исключений в 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 (снова см. Второй комментарий Стива ниже)