当前位置: 首页 > news >正文

Python从入门到精通秘籍十

一、Python之了解异常

当在Python中执行代码时,如果发生错误,就会抛出异常(Exception)。处理异常是编写健壮的代码的重要部分。Python提供了try-except语句来捕获和处理异常。

下面是使用Python代码详细讲解异常处理的例子:

# 1. 尝试执行可能会引发异常的代码块
try:num1 = int(input("请输入一个整数:"))num2 = int(input("请输入另一个整数:"))result = num1 / num2print("结果为:", result)# 2. 捕获特定类型的异常
except ValueError:print("输入的不是有效的整数!")except ZeroDivisionError:print("除数不能为零!")# 3. 捕获其他类型的异常
except Exception as e:print("发生了未知错误:", str(e))# 4. 如果没有发生异常,则执行这个代码块
else:print("没有发生异常!")# 5. 不管是否发生异常,都会执行这个代码块
finally:print("程序执行完毕。")

在上面的代码示例中,我们首先尝试执行可能会引发异常的代码块。如果发生异常,Python会跳转到相应的except代码块,并执行与异常类型匹配的代码。如果没有匹配的except代码块,那么会跳转到通用的Exception类型的except代码块。

在异常处理过程中,还可以使用else代码块来处理没有发生异常的情况。无论是否发生异常,都会执行finally代码块。

通过合理处理异常,我们可以使程序在出现错误时不崩溃,并提供友好的错误提示信息,从而增强代码的稳定性和可靠性。

二、Python之异常捕获

当在Python中执行代码时,如果发生错误,就会抛出异常(Exception)。异常是Python语言处理错误和异常情况的一种机制。通过捕获异常,我们可以对错误进行处理,避免程序崩溃。

下面是使用Python代码详细讲解异常捕获的例子:

# 1. 尝试执行可能会引发异常的代码块
try:num1 = int(input("请输入一个整数:"))num2 = int(input("请输入另一个整数:"))result = num1 / num2print("结果为:", result)# 2. 捕获特定类型的异常
except ValueError:print("输入的不是有效的整数!")except ZeroDivisionError:print("除数不能为零!")# 3. 捕获多个异常类型
except (TypeError, FileNotFoundError):print("发生了类型错误或文件不存在错误!")# 4. 捕获所有类型的异常
except Exception as e:print("发生了未知错误:", str(e))# 5. 获取异常信息
except ZeroDivisionError as e:print("除数不能为零!", str(e))# 6. 如果没有发生异常,则执行这个代码块
else:print("没有发生异常!")# 7. 不管是否发生异常,都会执行这个代码块
finally:print("程序执行完毕。")

在上述代码中,我们使用了try-except语句来捕获异常。首先,我们尝试执行可能引发异常的代码块。如果发生异常,Python会跳转到与异常类型匹配的except代码块,并执行其中的代码。如果没有匹配的except代码块,会继续向上查找,直到找到通用的Exception类型的except代码块。

在捕获异常时,可以根据具体情况使用特定的异常类型进行捕获,也可以使用元组同时捕获多个异常类型。此外,还可以通过as关键字获取异常对象,以便进一步处理或打印异常信息。

在异常处理过程中,可以使用else代码块处理没有发生异常的情况。不管是否发生异常,都会执行finally代码块中的代码,确保程序的某些操作无论是否成功都能得到执行。

通过合理捕获和处理异常,我们可以提高程序的稳定性和可靠性,避免由于错误导致的程序崩溃。

三、Python之异常的传递性

在Python中,异常可以在代码的不同层级之间传递。当一个异常没有在当前层级被捕获时,它会向上层级传递,直到找到匹配的异常处理程序或者到达顶层,如果仍未被捕获,则会导致程序崩溃。

下面是使用Python代码详细讲解异常传递性的例子:

# 1. 定义一个函数,该函数会抛出异常
def divide(x, y):try:result = x / yprint("结果为:", result)except ZeroDivisionError:print("除数不能为零!")# 抛出新的异常raise ValueError("除数不能为零")# 2. 调用函数,并捕获抛出的异常
try:divide(10, 0)
except ValueError as e:print("捕获到异常:", str(e))# 3. 异常在多层级之间传递
def calculate():try:divide(10, 0)except ValueError as e:# 在函数内部重新抛出异常raise RuntimeError("发生了运行时错误") from etry:calculate()
except RuntimeError as e:print("捕获到异常:", str(e))print("原始异常:", str(e.__cause__))

在上述代码中,我们首先定义了一个名为divide的函数。该函数尝试计算两个数的商,并在除数为零时抛出ValueError异常。在异常处理程序中,我们又抛出了一个新的ValueError异常,这样异常就会传递到调用该函数的地方。

在主程序中,我们调用divide函数,并捕获抛出的ValueError异常。通过捕获异常,我们可以处理异常或者获取异常的相关信息。

接下来,我们定义了一个名为calculate的函数,在其中调用了divide函数。在calculate函数内部,我们又捕获了ValueError异常,并重新抛出一个RuntimeError异常。这样,异常就会在多层级之间传递。

最后,在主程序中,我们捕获了RuntimeError异常,并打印出异常信息。通过__cause__属性,我们还可以访问原始的异常对象。

通过异常的传递性,我们可以在不同层级的代码中捕获和处理异常,从而实现对错误情况的处理和控制流程的管理。

四、Python之模块的概念和导入

在Python中,模块是一个包含了一些定义和语句的文件。通过使用模块,我们可以将代码分成多个文件,使得代码更加模块化、结构清晰,并且可以在不同的程序中共享和重复使用。

下面是使用Python代码详细讲解模块的概念和导入的例子:

假设我们有两个文件:math_operations.pymain.py

# math_operations.pydef add(x, y):return x + ydef subtract(x, y):return x - y
# main.py# 1. 导入整个模块
import math_operationsresult = math_operations.add(5, 3)
print(result)result = math_operations.subtract(8, 2)
print(result)# 2. 导入特定函数
from math_operations import add, subtractresult = add(5, 3)
print(result)result = subtract(8, 2)
print(result)# 3. 给模块指定别名
import math_operations as moresult = mo.add(5, 3)
print(result)result = mo.subtract(8, 2)
print(result)# 4. 导入所有函数
from math_operations import *result = add(5, 3)
print(result)result = subtract(8, 2)
print(result)

在上述代码中,math_operations.py文件是一个模块,其中定义了两个函数:addsubtract。这些函数可以在其他文件中进行导入和使用。

main.py文件中,我们演示了不同的模块导入方式:

  1. 使用import语句导入整个math_operations模块。这样就可以通过math_operations.addmath_operations.subtract调用模块中的函数。

  2. 使用from ... import语句导入指定的函数。这样就可以直接使用addsubtract调用这些函数,无需加上模块名前缀。

  3. 使用import ... as语句给模块指定别名。这样就可以使用mo.addmo.subtract调用模块中的函数。

  4. 使用from ... import *语句导入模块中的所有函数。这样就可以直接使用addsubtract调用这些函数,无需加上模块名前缀。

通过模块的概念和导入,我们可以将代码组织得更好、更易于管理,并且可以重复使用已经定义好的功能。模块化的设计使得代码更加模块化、可读性更强,并且方便多人协作开发。

http://www.lryc.cn/news/322413.html

相关文章:

  • Android:adb命令
  • Github基本功能和使用技巧
  • mac上系统偏好里无法停止mysql
  • launchctl及其配置、使用、示例
  • 如何在Ubuntu系统搭建Excalidraw容器并实现公网访问本地绘制流程图
  • PostgreSQL和MySQL的异同
  • 有ai写文案的工具吗?分享5款好用的工具!
  • docker+k8s相关面试题
  • 力扣爆刷第101天之hot100五连刷91-95
  • 前端vue实现甘特图
  • SQLiteC/C++接口详细介绍之sqlite3类(十五)
  • 每日三个JAVA经典面试题(十八)
  • RPC 和 序列化
  • 【原创】三十分钟实时数据可视化网站前后端教程 Scrapy + Django + React 保姆级教程向
  • MySQL的备份
  • Linux 磁盘的一生
  • C#配置连接数据库字段
  • QCOM和其他常见芯片平台术语缩写
  • css页面布局
  • 6、Design Script之列表
  • Mysql数据库的多实例部署
  • 陈巍:Sora大模型技术精要万字详解(上)——原理、关键技术、模型架构详解与应用
  • JS原型和原型链的理解
  • 力扣题单(小白友好)
  • 王道c语言ch11-单链表的新建、插入、删除例题
  • 蓝桥杯刷题--python-23
  • 蓝桥杯刷题--python-24
  • 面向对象(C# )
  • Lombok:@Cleanup资源释放利器
  • IoT 物联网场景中 LoRa + 蓝牙Bluetooth 室内场馆高精定位技术全面解析