Today, we're continuing our 10-day journey to learn Python, kicking off Day 8's lesson. If you haven't checked out Day 1 yet, you can find it here: 🎁Learn Python in 10 Days: Day 1
Day 8: Exceptions
1. Understanding Exceptions
When the Python interpreter detects an error, it can't execute the code and instead displays an error message. This is called an "exception," or more commonly, a "bug."
Historically, a literal bug (insect) caused a malfunction in a computer, so we now refer to software errors as "bugs."
Example: Trying to open a non-existent file.
f = open("www.txt", "r", encoding="utf-8")
# FileNotFoundError: [Errno 2] No such file or directory: 'www.txt'
2. Handling Exceptions
Handling exceptions means preparing for and dealing with potential errors to avoid program crashes.
Reasons to catch exceptions:
- Improve Stability: Prevent your program from crashing due to errors.
- Easier Debugging: Get detailed error info to quickly locate issues.
- Better Maintenance: Separate error-handling code from business logic.
When encountering a bug, you can either:
- Stop the entire program,
- Handle the bug and continue running.
In practice, it's better to handle errors so that your program can continue running smoothly.
Basic syntax for catching exceptions:
try:
    # Code that may raise an error
except:
    # Code to run if an error occurs
Example: Try opening a file in read mode, if it doesn't exist, open it in write mode.
try:
    f = open("www.txt", "r", encoding="utf-8")
except:
    f = open("www.txt", "w", encoding="utf-8")
Catching specific exceptions:
try:
    print(name)
except NameError as e:
    print("NameError: 'name' is not defined")
Important Notes:
- If the error type doesn't match the one you're catching, the exception won't be caught.
- Generally, put only one line of code in the tryblock.
Catching multiple exceptions:
try:
    print(1 / 0)
except (NameError, ZeroDivisionError):
    print("Error occurred")
Catching all exceptions:
try:
    # Code that may raise an error
except Exception as e:
    # Code to run if any error occurs
Using else: Code that runs if no exceptions occur.
try:
    print(1)
except Exception as e:
    print(e)
else:
    print("No exceptions occurred")
Using finally: Code that runs no matter what.
try:
    f = open("test.txt", "r", encoding="utf-8")
except Exception as e:
    print(e)
    f = open("test.txt", "w", encoding="utf-8")
else:
    print("No exceptions occurred")
finally:
    f.close()
3. Exception Propagation
def func1():
    print("Start of func1")
    print(1 / 0)
    print("End of func1")
def func2():
    print("Start of func2")
    func1()
    print("End of func2")
def main():
    try:
        func2()
    except Exception as e:
        print(e)
main()
# Output:
# Start of func2
# Start of func1
# division by zero
If an exception isn't caught within a function, it propagates to the calling function.
4. Python Modules
A Python module is a file ending in .py. It can define functions, classes, and variables, and can also include executable code.
Modules help bundle related functions and data. For instance, use the time module for time-related tasks.
Importing modules:
import time
print("Start")
time.sleep(1)
print("End")
Using from to import specific attributes:
from time import sleep
print("Start")
sleep(1)
print("End")
Using * to import all attributes:
from time import *
sleep(1)
Using as to create aliases:
import time as t
t.sleep(2)
print("haha")
from time import sleep as sl
sl(2)
print("hehe")
4.2 Creating Custom Modules
You can create your own modules for specific tasks by writing Python files.
Example: Create my_module.py with a function:
# my_module.py
def my_test(a, b):
    print(a + b)
if __name__ == '__main__':
    my_test(1, 2)
# another_module.py
from my_module import my_test
my_test(1, 2)
5. Python Packages
A package is a collection of modules. Physically, it's a folder containing a special __init__.py file.
Creating a package:
- Create a folder named my_package.
- Add modules (my_module1.py,my_module2.py).
- Add an __init__.pyfile.
Using packages:
import my_package.my_module1
my_package.my_module1.my_function()
Or using from import:
from my_package import my_module1
my_module1.my_function()
5.2 Installing Third-Party Packages
Use pip to install third-party packages:
pip install package_name
To speed up the process by using a mirror site:
pip install -i https://packagecloud.io/pypa/python/simple package_name
Example: Creating a custom package my_utils.
- Create a folder my_utils.
- Add str_util.pyandfile_util.py.
# str_util.py
def str_reverse(s):
    return s[::-1]
def substr(s, x, y):
    return s[s.index(x):s.index(y)]
# file_util.py
def print_file_info(file_name):
    try:
        with open(file_name, 'r') as f:
            content = f.read()
            print(content)
    except Exception as e:
        print(e)
def append_file_info(file_name, data):
    with open(file_name, 'a') as f:
        f.write(data + "\n")
Then use these modules in your scripts:
from my_utils import str_util, file_util
print(str_util.str_reverse("hello"))
file_util.append_file_info("test.txt", "Some data")
By following these guidelines, you can effectively handle exceptions, organize your code with modules and packages, and utilize third-party libraries to enhance your Python projects.
 
 
              
 
    
Top comments (0)