Categories of Errors
Learn about error categories in Ruby.
Errors in programming
Errors are problems or faults that occur in the program and cause unexpected behavior. Some errors don’t allow the program to begin execution, some can interrupt the execution, and others can be detected only after analyzing the output of the program. Errors are a way through which our machines tell us that they do not understand what we want them to do. It is the same as if people do not follow the rules and words of our language, we may not understand what they want to say or want us to do. Let’s explore the various types of programming errors and how they occur.
Syntax errors
Syntax errors are the most basic type of errors. They arise when Ruby is unable to understand a line of code based on the rules of the language. For example, 2k
is neither a valid variable name nor a valid expression in Ruby, so it will return a syntax error.
Syntax errors are almost always fatal, which is to say that there is never a way to execute a piece of code containing syntax errors successfully. Sometimes, a syntax error doesn’t even allow the program to begin execution.
variable = 5+ # Assigning an invalid value to the variableprint(variable)
The +
written at the end of line 1 causes a syntax error because we cannot use an operator without it being followed by an operand. Possible fixes to resolve this error include:
- Removing the symbol
+
if it’s a simple assignment - Adding a second operand after
+
if thevariable
should store the sum of two numbers
Logical errors
Most of the time, a program completes its execution despite an error in the code. When we can trace such errors due to the unexpected output of the program, it is called a logical error. A simple example of a logical error is demonstrated in the following program:
a = 8if a % 2 == 0 # If the number is divisible by 2print("#{a} is an odd number\n")elseprint("#{a} is an even number\n")end
Logical errors are only erroneous in the perspective of the programming goal. The if
statement above works within the framework of Ruby, but gives the opposite of the expected result. We can fix this error by inverting the conditional expression or by swapping the true and false branches.
Exceptions
Exceptions arise when Ruby knows what to do with a piece of code but is unable to perform the action. For example, if Ruby attempts to access the Internet but no Internet connection is available, Ruby knows what to do with the command but is unable to perform it. Similarly, Ruby knows how to divide two numbers, but the division by zero is undefined. The following program demonstrates the same exception:
a = 5b = 0print("#{a}\n")print("#{b}\n")result = a / b # Dividing a by bprint(result)
The program above executes and shows the output up to line 4. Division by zero gives us an undefined result. The divisor, b, in line 5 interrupts the execution of the program with an exception. We can fix this error by using a nonzero divisor.
Ruby error practice
Here are a few example programs to help us understand errors in Ruby.
Greater of two numbers
We want a program that shows the greater of two distinct numbers. There is an error in the following code. Let’s try to trace and fix it to obtain the desired output:
a = 1b = 2if a > b # If a greater than bprint("#{b} is greater than #{a}\n")elseprint("#{a} is greater than #{b}\n")end
Multiple or non multiple
We want to write a program that prints either multiple
or not multiple
depending on whether the second number is a multiple of the first one or not. There’s an error in the following code. Let’s try to trace and fix it to obtain the desired output:
first = 4second = 8if second / first == 0 # If first number is completely divisible by secondprint("#{second} is a multiple of #{first}\n")elseprint("#{second} is not a multiple of #{first}\n")end
The area and perimeter of a square
We want to write a program that calculates the area and perimeter of a square. There’s an error in the following code. Let’s try to trace and fix it to obtain the desired output.
side = 5print("The side of square is #{side}.\n")perimeter = side * # Calculating perimeterarea = side * # Calculating areaprint("Area of a square : #{area}\n")print("Perimeter of a square : #{perimeter}\n")