|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在掌握了Python的类与对象后,下一步是深入理解模块化开发和异常处理。模块与包帮助我们组织代码,增强代码的可维护性和重用性,而异常处理则是编写健壮代码的重要技能。本文将系统讲解Python中模块、包和异常处理的核心概念与实用技巧。
一、模块:代码组织的基本单位
1.1 什么是模块?
模块(Module)是Python中用于组织代码的基本单位,一个.py文件就是一个模块。通过模块,我们可以将相关功能的代码放在一起,便于重用和维护。
例如,一个名为math_utils.py的模块可能包含一些数学相关的函数:
- # math_utils.py
- def add(a, b):
- return a + b
- def subtract(a, b):
- return a - b
复制代码
1.2 如何导入模块?
Python使用import关键字导入模块。以下是常见的导入方式:
- # 导入整个模块
- import math_utils
- print(math_utils.add(2, 3)) # 输出:5
- # 导入模块中的特定函数
- from math_utils import subtract
- print(subtract(5, 2)) # 输出:3
- # 使用别名导入
- import math_utils as mu
- print(mu.add(4, 6)) # 输出:10
复制代码
1.3 Python内置模块
Python标准库中包含许多内置模块,例如:
math:提供数学函数。
os:操作系统接口。
random:随机数生成。
datetime:处理日期和时间。
- import math
- import random
- print(math.sqrt(16)) # 输出:4.0
- print(random.randint(1, 10)) # 输出:1到10之间的随机整数
复制代码
二、包:模块的集合
2.1 什么是包?
包(Package)是多个模块的集合,用于构建更大规模的项目。一个包是一个包含__init__.py文件的目录。
包的结构如下:
- my_package/
- __init__.py
- math_utils.py
- string_utils.py
复制代码
2.2 创建和使用包
创建一个包:
- # 文件结构
- my_package/
- __init__.py
- math_utils.py
- string_utils.py
- # math_utils.py
- def add(a, b):
- return a + b
- # string_utils.py
- def to_uppercase(s):
- return s.upper()
复制代码
导入包:
- # 导入整个包中的模块
- from my_package import math_utils, string_utils
- print(math_utils.add(3, 4)) # 输出:7
- print(string_utils.to_uppercase("hello")) # 输出:HELLO
- # 从模块中导入特定函数
- from my_package.math_utils import add
- print(add(5, 6)) # 输出:11
复制代码
三、异常处理:编写健壮的代码
3.1 什么是异常?
异常(Exception)是程序运行时发生的错误。例如,除以零会引发ZeroDivisionError,访问未定义的变量会引发NameError。
- print(10 / 0) # ZeroDivisionError: division by zero
- print(undefined_variable) # NameError: name 'undefined_variable' is not defined
复制代码
3.2 捕获异常
使用try-except语句捕获并处理异常,从而避免程序崩溃。
- try:
- print(10 / 0)
- except ZeroDivisionError:
- print("Cannot divide by zero!") # 输出:Cannot divide by zero!
复制代码
3.3 捕获多个异常
可以同时捕获多种类型的异常。
- try:
- print(undefined_variable)
- except (ZeroDivisionError, NameError) as e:
- print(f"An error occurred: {e}")
复制代码
3.4 使用else和finally
else:在没有异常时执行。
finally:无论是否有异常,都会执行。
- try:
- result = 10 / 2
- except ZeroDivisionError:
- print("Cannot divide by zero!")
- else:
- print(f"Result is {result}") # 输出:Result is 5.0
- finally:
- print("Execution completed.") # 输出:Execution completed.
复制代码
3.5 自定义异常
可以通过继承Exception类创建自定义异常。
- class CustomError(Exception):
- pass
- def check_positive(value):
- if value < 0:
- raise CustomError("Value must be positive!")
- try:
- check_positive(-10)
- except CustomError as e:
- print(e) # 输出:Value must be positive!
复制代码
转自:CSDN DevKevin
|
|