Error Handling Patterns
Status Code
Naming Outcomes
Small Fortran programs often return integer status values instead of throwing exceptions. A select case block can map each code to a readable outcome.
Program
Play the program to choose a status code and map it to a label.
status_code.f90
Replay: real traced execution (multi-file project)
program status_code_demo
implicit none
integer :: status
character(len=12) :: label
status = 0
select case (status)
case (0)
label = 'ok'
case (1)
label = 'retry'
case default
label = 'failed'
end select
print '(A)', trim(label)
end program status_code_demo
program status_code_demo
implicit none
integer :: status
character(len=12) :: label
status = 1
select case (status)
case (0)
label = 'ok'
case (1)
label = 'retry'
case default
label = 'failed'
end select
print '(A)', trim(label)
end program status_code_demo
program status_code_demo
implicit none
integer :: status
character(len=12) :: label
status = 2
select case (status)
case (0)
label = 'ok'
case (1)
label = 'retry'
case default
label = 'failed'
end select
print '(A)', trim(label)
end program status_code_demo
status ← 0
6status = 07select case (status)values this step0statusmatched ← case (0)
6status = 07select case (status)8 case (0)values this stepcase (0)matched0statuslabel ← ok
8case (0)9 label = 'ok'10case (1)values this stepoklabelprint '(A)', trim(label)
14 end select15 print '(A)', trim(label)16end program status_code_demooutputokvalues this stepoklabel
status ← 1
6status = 17select case (status)values this step1statusmatched ← case (1)
6status = 17select case (status)8 case (0)values this stepcase (1)matched1statuslabel ← retry
10case (1)11 label = 'retry'12case defaultvalues this stepretrylabelprint '(A)', trim(label)
14 end select15 print '(A)', trim(label)16end program status_code_demooutputretryvalues this stepretrylabel
status ← 2
6status = 27select case (status)values this step2statusmatched ← case default
6status = 27select case (status)8 case (0)values this stepcase defaultmatched2statuslabel ← failed
12 case default13 label = 'failed'14end selectvalues this stepfailedlabelprint '(A)', trim(label)
14 end select15 print '(A)', trim(label)16end program status_code_demooutputfailedvalues this stepfailedlabel
status code
A small integer can summarize the result of an operation.
select case
`select case` keeps outcome mapping explicit.
default case
`case default` handles unexpected status values.