Make your Python Code More Readable with Custom Exceptions

Real Python · Intermediate ·📰 AI News & Updates ·9y ago

Key Takeaways

The video demonstrates how to create custom exception classes in Python to make code more readable and maintainable, using a simple example of a validate function that checks the length of a name.

Full Transcript

hey guys it's Daniel with another quick python tip for you so today I want to talk about how you can make your code more readable using custom exceptions um so to give you an example when you might want to do that uh let's say we have a simple function here we're going to call it validate and we're going to pass it a name which is just a simple string variable and that function is going to do a simple check on um name just to see if um if it's less than 10 characters long right and if it's less than 10 characters long we want to reject that name because we're just going to say hey you know what it's not a valid name so uh one way to communicate that to um someone who might be calling that function you know one of your co-workers um maybe you're going to call that function yourself somewhere in the code I mean it's highly likely considering that we're writing the function um what's the best way to communicate that right sure we could just return none H it's kind of easy to miss and just ignore that so typically what you do is you'd raise an exception um and we would probably pick something like uh Python's built-in value error right and um so what would happen now is that when we take this function and we call it on a name that's less than 10 characters wrong uh long we get a value error so let's take a look at what that looks like so let's define validate here and we're just going to call validate on uh a three character name here and we get the Val ER value error right that's sort of the error report that we would get in in a trace back uh when our program crashes um that's okay you could probably use that to trace it back to the line you were working in you could kind of figure out why you got that value error maybe um a way to to make that a little bit more clear and just to communicate the intent a little better would be to say okay we're going to do a value error and uh we're going to tell you that the name is too short so if you do that what happens is um that you get a little bit of more context right we're going to tell you hey the name is too short so the downside of that is um programmatically it becomes really difficult to distinguish between you know a name too short kind of value error and just any other old value ER so that's not great but there's a really good way to fix this that I'm going to show you now so what you would do in this case is you would create a new um subass of value error and we're going to call that um name to short error and that's going to be based on the original value error and because we're not you know we're not even trying to add more stuff to Value error we're not going to add extra for behaviors or properties so we're just going to say pass here to leave the class alone but what we've done now we've created a new type that we can now actually use in um our code here and um what's cool about this now is that when we when someone runs this code and they actually trigger the condition that raises the value error they will get a name to short error right you get that initial console because I'm running this in inside the Python 3 interpreter here but um it gives someone who hits that error a bit more context um and tells them the the original programmer's intent right you're going to be able to quickly figure out oh okay you know this is being triggered because the name was too short and we can make this a little nicer still so what I like to do in uh in a situation like this is to actually pass the uh value that cost the error to um my custom exception type right so um in this case we would obviously pass name and then when we run this in the python reppel you will see that uh the error report is kind of nice at this point because you know if this blows up this is what you would see eventually in your in your uh Trace back when when you get uh the the the exception printed out at some point um you would see something like that name to short error Joe um and that was cost invalidate so at this point it would be really easy for someone else or maybe your your future self to identify what went wrong here and um you're probably going to save yourself more time then the time it you know then the time it took you to to go and Define that custom exception type so as with all things you know it's not something you should overdo but it can be extremely helpful especially if you're defining um a public API for for um let's say a module that you want to share with other people um that sort of stuff is going to save you tons of time and it's just going to make you a lot more productive as a developer cool I hope this helped you out uh take care and write more python

Original Description

How to make your Python code more readable with custom exception classes. In this screencast I'll walk you through a simple code example that demonstrates how you can use custom exception classes in your Python code to make it easier to understand, easier to debug, and more maintainable. ► Weekly Tips for Python Developers: https://dbader.org/newsletter
Watch on YouTube ↗ (saves to browser)
Sign in to unlock AI tutor explanation · ⚡30

Playlist

Uploads from Real Python · Real Python · 7 of 60

1 A better Python REPL – bpython vs python interpreter
A better Python REPL – bpython vs python interpreter
Real Python
2 Introducing large-type.com – A Utility Website
Introducing large-type.com – A Utility Website
Real Python
3 Reading Hacker News Without Wasting Tons of Time
Reading Hacker News Without Wasting Tons of Time
Real Python
4 Forward References and Python 3 Type Hints
Forward References and Python 3 Type Hints
Real Python
5 Using Sublime Text as your Git Editor
Using Sublime Text as your Git Editor
Real Python
6 Python Code Linting and Auto-Complete for Sublime Text
Python Code Linting and Auto-Complete for Sublime Text
Real Python
Make your Python Code More Readable with Custom Exceptions
Make your Python Code More Readable with Custom Exceptions
Real Python
8 Write Better Tests with Sublime Text's Split Layout Feature
Write Better Tests with Sublime Text's Split Layout Feature
Real Python
9 How to Use Sublime Text from the Command Line
How to Use Sublime Text from the Command Line
Real Python
10 Rename Variables with Multiple Selection in Sublime Text
Rename Variables with Multiple Selection in Sublime Text
Real Python
11 Sublime Text Settings for Writing PEP 8 Python
Sublime Text Settings for Writing PEP 8 Python
Real Python
12 Write Cleaner Python with Sublime Text's Indent Guides
Write Cleaner Python with Sublime Text's Indent Guides
Real Python
13 Sublime Text Whitespace Settings for Python Development
Sublime Text Whitespace Settings for Python Development
Real Python
14 Function Argument Unpacking in Python
Function Argument Unpacking in Python
Real Python
15 Python Code Review: Debugging and Refactoring "Conway's Game of Life" +  Automated Tests
Python Code Review: Debugging and Refactoring "Conway's Game of Life" + Automated Tests
Real Python
16 Using "get()" to Return a Default Value from a Python Dict
Using "get()" to Return a Default Value from a Python Dict
Real Python
17 A Python Shorthand for Swapping Two Variables
A Python Shorthand for Swapping Two Variables
Real Python
18 Python Code Review: Refactoring a Web Scraper, PEP 8 Style Guide Compliance, requirements.txt
Python Code Review: Refactoring a Web Scraper, PEP 8 Style Guide Compliance, requirements.txt
Real Python
19 Click & Jump to Test Failures from the Command Line (iTerm2)
Click & Jump to Test Failures from the Command Line (iTerm2)
Real Python
20 Setting up Sublime Text for Python Developers
Setting up Sublime Text for Python Developers
Real Python
21 Sublime Text + Python Guide Overview
Sublime Text + Python Guide Overview
Real Python
22 Python Code Review: Adding Pytest Tests to an Existing Python Web Scraper
Python Code Review: Adding Pytest Tests to an Existing Python Web Scraper
Real Python
23 Type-Checking Python Programs With Type Hints and mypy
Type-Checking Python Programs With Type Hints and mypy
Real Python
24 A Shorthand for Merging Dictionaries in Python 3.5+
A Shorthand for Merging Dictionaries in Python 3.5+
Real Python
25 Python Code Review Flask Web Security Tutorial + Virtualenvs, requirements.txt
Python Code Review Flask Web Security Tutorial + Virtualenvs, requirements.txt
Real Python
26 My Python Code Looks Ugly and Confusing – Help!
My Python Code Looks Ugly and Confusing – Help!
Real Python
27 Setting Up a Programmer Portfolio/Developer Blog – How To Get Started
Setting Up a Programmer Portfolio/Developer Blog – How To Get Started
Real Python
28 Do I Need a GitHub/GitLab/Bitbucket Profile as a Developer?
Do I Need a GitHub/GitLab/Bitbucket Profile as a Developer?
Real Python
29 Programmer Portfolio – Example and Walkthrough
Programmer Portfolio – Example and Walkthrough
Real Python
30 How to Get Your 1st Speaking Gig at a Tech Conference
How to Get Your 1st Speaking Gig at a Tech Conference
Real Python
31 How to Build Your Public Speaking Skills as a Developer
How to Build Your Public Speaking Skills as a Developer
Real Python
32 The Object-oriented Version of "Spaghetti Code" is "Lasagna Code" ?!
The Object-oriented Version of "Spaghetti Code" is "Lasagna Code" ?!
Real Python
33 Setting up Sublime Text for Python Developers – Lesson #1
Setting up Sublime Text for Python Developers – Lesson #1
Real Python
34 Cool New Features in Python 3.6
Cool New Features in Python 3.6
Real Python
35 "is" vs "==" in Python – What's the Difference? (And When to Use Each)
"is" vs "==" in Python – What's the Difference? (And When to Use Each)
Real Python
36 Emulating switch/case Statements in Python with Dictionaries
Emulating switch/case Statements in Python with Dictionaries
Real Python
37 Python Function Argument Unpacking Tutorial (* and ** Operators)
Python Function Argument Unpacking Tutorial (* and ** Operators)
Real Python
38 What Code Should I Put On My GitHub/GitLab/BitBucket Profile?
What Code Should I Put On My GitHub/GitLab/BitBucket Profile?
Real Python
39 A Crazy Python Dictionary Expression ?!
A Crazy Python Dictionary Expression ?!
Real Python
40 String Conversion in Python: When to Use __repr__ vs __str__
String Conversion in Python: When to Use __repr__ vs __str__
Real Python
41 Method Types in Python OOP: @classmethod, @staticmethod, and Instance Methods
Method Types in Python OOP: @classmethod, @staticmethod, and Instance Methods
Real Python
42 Optional Arguments in Python With *args and **kwargs
Optional Arguments in Python With *args and **kwargs
Real Python
43 Python Context Managers and the "with" Statement (__enter__ & __exit__)
Python Context Managers and the "with" Statement (__enter__ & __exit__)
Real Python
44 Installing Python Packages with pip and virtualenv / venv
Installing Python Packages with pip and virtualenv / venv
Real Python
45 "For Each" Loops in Python with enumerate() and range()
"For Each" Loops in Python with enumerate() and range()
Real Python
46 Python Code Review: LibreOffice Automation and the Python Standard Library
Python Code Review: LibreOffice Automation and the Python Standard Library
Real Python
47 Managing Python Dependencies With Pip and Virtual Environments – Lesson #1
Managing Python Dependencies With Pip and Virtual Environments – Lesson #1
Real Python
48 Python Tutorial: List Comprehensions Step-By-Step
Python Tutorial: List Comprehensions Step-By-Step
Real Python
49 Leveraging Python's Implicit "return None" Statements
Leveraging Python's Implicit "return None" Statements
Real Python
50 What's the meaning of underscores (_ & __) in Python variable names?
What's the meaning of underscores (_ & __) in Python variable names?
Real Python
51 Python Data Structures: Sets, Frozensets, and Multisets (Bags)
Python Data Structures: Sets, Frozensets, and Multisets (Bags)
Real Python
52 Writing automated tests for Python command-line apps and scripts
Writing automated tests for Python command-line apps and scripts
Real Python
53 How to find great Python packages on PyPI, the Python Package Repository
How to find great Python packages on PyPI, the Python Package Repository
Real Python
54 Immutable vs Mutable Objects in Python
Immutable vs Mutable Objects in Python
Real Python
55 PyPI vs Warehouse, the Next-Generation Python Package Repository
PyPI vs Warehouse, the Next-Generation Python Package Repository
Real Python
56 pep8.org — The Prettiest Way to View the PEP 8 Python Style Guide
pep8.org — The Prettiest Way to View the PEP 8 Python Style Guide
Real Python
57 My Experience at PyCon 2017 in Portland
My Experience at PyCon 2017 in Portland
Real Python
58 Pylint Tutorial – How to Write Clean Python
Pylint Tutorial – How to Write Clean Python
Real Python
59 "Reverse a List in Python" Tutorial: Three Methods & How-to Demos
"Reverse a List in Python" Tutorial: Three Methods & How-to Demos
Real Python
60 Python Refactoring: "while True" Infinite Loops & The "input" Function
Python Refactoring: "while True" Infinite Loops & The "input" Function
Real Python

This video teaches how to create custom exception classes in Python to improve code readability and maintainability. It provides a simple example of a validate function that checks the length of a name and demonstrates how to use custom exceptions to handle errors.

Key Takeaways
  1. Define a custom exception class that inherits from ValueError
  2. Use the custom exception class in your code to handle specific error cases
  3. Pass relevant information to the custom exception class to provide more context
  4. Use the custom exception class to improve code readability and maintainability
💡 Custom exception classes can be used to provide more context and improve code readability when handling errors in Python.

Related AI Lessons

Up next
News At 10
Channels Television
Watch →