Writing clean, efficient, and error-free code is crucial for any Python developer. One of the best tools for maintaining high code quality is Pylint — a powerful static code analyzer for Python. Let’s dive into how Pylint works, the types of errors it catches, and how we can improve our code using it.
Pylint is a static code analysis tool for Python 2 and 3, with its latest version supporting Python 3.8.0 and above. It analyzes your code without running it and checks for:
Pylint also gives your code a score out of 10 based on the number and severity of issues present.
Pylint categorizes issues into five distinct types:
Let’s see Pylint in action with some examples.
# Write a Python program that takes two integers as input and performs division (num1 / num2). Handle the ZeroDivisionError and display a custom error message when the second number is zero.
import logging
logging.basicConfig(
filename="exception_handling.log", encoding="utf-8", level=logging.DEBUG
)
try:
num1 = int(input("Enter first number: "))
num2 = int(input("Enter second number: "))
result = num1 / num2
print(result)
except ZeroDivisionError as e:
logging.error(e)
# Write a Python program that takes user input for age. Create a custom exception InvalidAgeError to handle cases where the age is below 0 or above 120.
class InvalidAgeError(Exception):
pass
try:
age = int(input("Enter your age: "))
if age < 0 or age > 120:
raise InvalidAgeError("Age must be between 0 and 120")
print(age)
except InvalidAgeError as e:
logging.error(f"{e}")Example 2: Custom Exception for Age Validation
When we examine above code using the pylint, we get different errors as given below. Our current score is 6.67.$ pylint 1_exception_handling.py
We get several errors and warnings:
$ pylint 1_exception_handling.py
************* Module 1_exception_handling
1_exception_handling.py:1:0: C0301: Line too long (190/100) (line-too-long)
1_exception_handling.py:16:0: C0301: Line too long (152/100) (line-too-long)
1_exception_handling.py:1:0: C0114: Missing module docstring (missing-module-docstring)
1_exception_handling.py:1:0: C0103: Module name "1_exception_handling" doesn't conform to snake_case naming style (invalid-name)
1_exception_handling.py:17:0: C0115: Missing class docstring (missing-class-docstring)
1_exception_handling.py:27:4: W1203: Use lazy % formatting in logging functions (logging-fstring-interpolation)
------------------------------------------------------------------
Your code has been rated at 6.67/10 (previous run: 7.22/10, -0.56)Our initial Pylint score is 6.67/10.
Let’s fix these issues step by step:
Here’s the refactored code:
"""
Exception Handling Assignments
"""
# Write a Python program that takes two integers as input and performs division (num1 / num2).
# Handle the ZeroDivisionError and display a custom error message when the second number is zero.
import logging
logging.basicConfig(
filename="exception_handling.log", encoding="utf-8", level=logging.DEBUG
)
try:
num1 = int(input("Enter first number: "))
num2 = int(input("Enter second number: "))
result = num1 / num2
print(result)
except ZeroDivisionError as e:
logging.error("%s", e)
# Write a Python program that takes user input for age.
# Create a custom exception InvalidAgeError to handle cases where the age is below 0 or above 120.
class InvalidAgeError(Exception):
"""custom exception class for invalid age input"""
try:
age = int(input("Enter your age: "))
if age < 0 or age > 120:
raise InvalidAgeError("Age must be between 0 and 120")
print(age)
except InvalidAgeError as e:
logging.error("%s", e)import logging
Running Pylint again:
$ pylint exception_handling.py
--------------------------------------------------------------------
Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)
🎉 Perfect score!
Using Pylint regularly helps maintain clean, readable, and efficient Python code. It enforces best practices, catches errors early, and suggests improvements — making you a better developer in the long run. Start integrating Pylint into your workflow and aim for that perfect 10/10!