Python小白学习教程从入门到入坑------第十八课 异常模块与包【上】(语法基础)

一、异常 

在Python中,异常(Exception)是一种用于处理在程序运行时可能发生的错误情况的机制

异常允许程序在检测到错误时不是简单地崩溃,而是能够优雅地处理这些错误,可能包括记录错误信息、清理资源、或者向用户提供有用的反馈

1.1 异常的基本概念

异常类型:Python内置了许多异常类型,如ValueError、TypeError、ZeroDivisionError等,用于表示不同类型的错误情况。此外,你也可以通过继承Exception类或其子类来创建自定义的异常类型

引发异常:使用raise语句可以手动引发一个异常。这可以在检测到某个错误条件时发生,或者仅仅是为了测试异常处理代码

捕获异常:使用try...except结构可以捕获并处理异常。try块包含可能会引发异常的代码,而except块则包含当异常发生时应该执行的代码

传递异常:如果在函数或方法中发生了异常,并且没有在该作用域内被捕获,那么异常会被传递给调用者。这个过程会一直持续到异常被捕获,或者程序因为未处理的异常而终止

异常链:在Python 3中,你可以使用raise ... from ...语法来明确指定一个异常是由另一个异常引发的,从而保留原始的异常信息和追溯信息

1.2 raise引发的异常

在 Python 中,raise 语句用于引发一个指定的异常。当程序执行到 raise 语句时,它会立即终止当前代码块的执行,并将控制权交给异常处理代码(如果有的话)

步骤:

1. 创建一个Exception(‘xxx’)对象,xxx---异常提示信息

2. raise 抛出这个对象(异常对象)

eg:执行了raise语法,代码不会继续往下运行

# raise Exception(”君君抛出了一个异常“)
def funa():
    raise Exception("君君抛出了一个异常")
    print("哈哈哈,笑死了")  # 执行了raise语法,代码不会继续往下运行
funa()

1.3 异常的捕获和处理 

eg1:

需求:密码长度不足,就报异常

分析:用户输入密码,判断输入的长度是否大于等于6,如果输入长度不足6位数,就报错,即抛出自定义异常,并捕获该异常

def login():
    pwd = input("请输入您的密码:")
    if len(pwd) >= 6:     # len() 求长度
        return "密码输入成功"
    raise Exception("长度不足6位,密码输入失败")
# print(login())
try:
    print(login())
except Exception as e:
    print(e)
# 捕获异常是为了检测到异常代码时代码还能继续往下运行,即程序不会终止
# 输出结果:
# 请输入您的密码:389
# 长度不足6位,密码输入失败

 eg2:

try:  
    # 可能会引发异常的代码  
    x = 1 / 0  # 这将引发ZeroDivisionError  
except ZeroDivisionError:  
    # 处理ZeroDivisionError异常的代码  
    print("Cannot divide by zero!")  
except Exception as e:  # 捕获所有其他异常类型  
    # 处理其他异常的代码  
    print(f"An unexpected error occurred: {e}")  
else:  
    # 如果没有异常发生,执行这里的代码  
    print("Division successful!")  
finally:  
    # 无论是否发生异常,都会执行这里的代码  
    print("This block is always executed.")

在此例子中,try块中的代码尝试执行一个除法操作,该操作会引发ZeroDivisionError。由于该异常在except ZeroDivisionError块中被捕获,因此程序会打印一条错误消息而不是崩溃。else块是可选的,当没有异常发生时,其中的代码会被执行。finally块也是可选的,但非常有用,因为它会无条件执行,常用于清理工作

1.4 注意

1、在Python中,raisetry是异常处理机制的两个核心要素。它们协同工作,用于检测和处理在程序执行过程中可能发生的错误情况。

2、raise 语句被用来触发一个异常。当程序执行到某个无法继续或需要特别处理的点时,可以使用 raise 抛出一个异常。这个异常可以是Python内置的(如 ValueErrorTypeError 等),也可以是用户自定义的(通过继承 Exception 类或其子类来创建)

3、try 语句用于包裹可能会引发异常的代码块。与之配套的还有 except 子句,用于捕获并处理这些异常。 

二、模块

含义:一个py文件就是一个模块,即导入一个模块本质上就是执行一个 py文件

2.1 模块分类

2.1.1 内置模块

如:math、random、time、os、logging,直接导入即可使用 

eg:导入math模块:提供了许多数学运算函数

import math  
  
# 计算平方根  
print(math.sqrt(16))  # 输出: 4.0  
  
# 获取圆周率π的值  
print(math.pi)  # 输出: 3.141592653589793
2.1.2 第三方模块(第三方库)

在Python中,安装和导入第三方模块通常涉及以下几个步骤:

1、安装第三方模块

使用pip安装:

下载:cmd窗口输入:pip install+模块名

win+r 输入cmd


Python的包管理工具pip是安装第三方模块的最常用方式。pip通常与Python一起安装,但如果你没有它,需要先安装它。

打开命令行或终端,然后输入以下命令来安装一个模块(例如,requests模块):

pip install requests

2、导入第三方模块

一旦模块安装成功,你就可以在Python脚本或交互式环境中导入并使用它

import requests  
  
# 现在你可以使用requests模块中的功能了  
response = requests.get('https://api.github.com')  
print(response.status_code)
 2.1.3 自定义模块

含义:即自己在项目中定义的模块

注意:命名要遵循标识符规定以及变量的命名规范,并且不要与内置模块起冲突,否则将导致模块功能无法使用

在Python中,安装和导入自定义模块通常涉及以下几个步骤:

1、创建自定义模块:

  1. 编写模块代码:
    首先,你需要编写一个Python文件,这个文件将作为你的自定义模块。确保文件名和模块名符合Python的命名规范(通常是小写字母和下划线的组合,避免使用空格和特殊字符)。

    例如,你可以创建一个名为mymodule.py的文件,并在其中编写一些函数或类。

  2. 保存模块文件:
    将你的模块文件保存在一个目录中。这个目录可以是你的项目目录,也可以是Python的模块搜索路径之一(如当前工作目录、PYTHONPATH环境变量指定的目录等)。

2、导入自定义模块

  1. 确保模块路径正确:
    在导入自定义模块之前,你需要确保Python解释器能够找到它。这通常意味着你的模块文件应该位于当前工作目录、PYTHONPATH环境变量指定的目录之一,或者你已经将其包含在一个Python包中。

  2. 导入模块:
    在Python脚本或交互式环境中,使用import语句来导入你的自定义模块

import mymodule  

# 现在你可以使用mymodule中定义的函数或类了  
result = mymodule.some_function()  
print(result)

如果模块和脚本位于同一目录中,上述代码通常可以正常工作。如果它们位于不同的目录中,你可能需要调整工作目录或使用相对/绝对导入

2.2 导入模块

在Python中,导入模块是一种组织和重用代码的方式。模块可以是Python标准库中的模块、第三方库中的模块,或者是你自己编写的模块

2.2.1 导入方式一

导入模块:

import 模块名 (注意:可以一个import导入多个模块,但最好是一个模块单独使用一个import)

调用功能:

模块名 功能名

eg:自己新建了一个模块pytest,现在要调用pytest中的name变量

# import 模块名
# 调用功能:
# 模块名.功能名
import pytest
# 调用pytest模块中的name变量
print(pytest.name)
2.2.2 导入方式二

语法:from...import...(从模块中导入指定的部分)

from  模块名  import  功能1,功能2...

在Python中,from 模块名 import 功能1, 功能2 是一种导入模块中特定功能(函数、类、变量等)的语法。这种导入方式允许你直接访问模块中的特定功能,而不需要通过模块名作为前缀

eg:假设你有一个名为math_utils.py的模块,它包含以下两个函数:

# math_utils.py  
  
def add(a, b):  
    return a + b  
  
def subtract(a, b):  
    return a - b

现在,你想在另一个Python脚本或交互式环境中使用这两个函数。你可以使用以下导入语句: 

from math_utils import add, subtract  # 导入函数只需要函数名,不需要加上()
  
# 现在你可以直接使用add和subtract函数,而不需要通过math_utils.前缀  
result1 = add(5, 3)  
result2 = subtract(5, 3)  
  
print(result1)  # 输出: 8  
print(result2)  # 输出: 2
2.2.3 导入方式三

语法:from  模块名  import  *(把模块中的所有内容全部导入)

注意:  不建议过多使用from...import..,声明,有时候命名冲突会造成一些错误

eg:假设你有一个名为example_module.py的模块,内容如下:

# example_module.py  
  
def foo():  
    print("Hello from foo!")  
  
def bar():  
    print("Hello from bar!")  
  
baz = "I am baz"

现在,你在另一个Python脚本或交互式环境中使用from example_module import *语句:

# another_script.py  
  
from example_module import *  
  
# 现在你可以直接使用foo, bar和baz,而不需要通过example_module.前缀  
foo()  # 输出: Hello from foo!  
bar()  # 输出: Hello from bar!  
print(baz)  # 输出: I am baz

在这个例子中,another_script.py脚本从example_module.py模块中导入了所有定义的函数(foobar)和变量(baz

因此,你可以直接在这些函数和变量上调用,而不需要通过模块名作为前缀

2.2.4 as起别名

1. as给模块起别名

语法:import  模块名  as  别名

eg: 

新建了一个模块pytest:

print("这是pytest模块")
# 变量
name = 'junjun'
# 函数
def funa():
    print("这是pytest模块中的funa()")
def funb():
    print("这是pytest模块中的funb()")

给模块起别名并调用模块中的函数及变量

import pytest as pt
# 调用模块中的funa变量
pt.funa()  # 输出结果:这是pytest模块中的funa()
# 打印模块中的name变量
print(pt.name)   # 输出结果:junjun

2、as给功能起别名
语法:from  模块名  import  功能  as  别名

eg:

新建了一个模块pytest:

print("这是pytest模块")
# 变量
name = 'junjun'
# 函数
def funa():
    print("这是pytest模块中的funa()")
def funb():
    print("这是pytest模块中的funb()")

给模块中的功能起别名并调用

from pytest import funa as a,name, funb as b
a()
print(name)
b()
# 注意:导入多个功能,使用逗号将功能与功能隔开,后面的功能也可以取别名:功能名 as 别名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/903772.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5G NR:BWP入门

简介 5G NR 系统带宽比4G LTE 大了很多,4G LTE 最大支持带宽为20MHz, 而5G NR 的FR1 最大支持带宽为100MHz, FR2 最大支持带宽为 400MHz。 带宽越大,意味了终端功耗越多。为了减少终端的功耗,5G NR 引入了BWP(Band Wid…

哪款宠物空气净化器能吸毛还低噪?希喂、范罗士真实测评

作为一个养宠清洁博主,这些年为了让家里更干净,让猫在家里更舒服,我也测了不少的清洁家电,其中包括洗地机、吸尘器、空气净化器以及扫地机器人等,其中宠物空气净化器的表现也算十分优异。 它可以快速去除空气中的浮毛…

【ComfyUI】手动安装部署ComfyUI的运行环境

如果不喜欢已有的一键启动包,我们可以手动的安装和部署ComfyUI的运行环境,相比一键安装包,自己部署ComfyUI 环境具有相当大的灵活性,其实部署ComfyUI 环境非常简单,不像网上说的那么复杂。下面我们就按照顺序给大家分享…

【JavaEE】【多线程】定时器

目录 一、定时器简介1.1 Timer类1.2 使用案例 二、实现简易定时器2.1 MyTimerTask类2.2 实现schedule方法2.3 构造方法2.4 总代码2.5 测试 一、定时器简介 定时器:就相当于一个闹钟,当我们定的时间到了,那么就执行一些逻辑。 1.1 Timer类 …

Http 状态码 301 Permanent Rediret 302 Temporary Redirect、 重定向 重写

HTTP状态码301和302是什么? 1、HTTP状态码301 HTTP状态码301表示永久性转移(Permanent Redirect),这意味着请求的资源已经被分配了一个新的URI,以后的引用应该使用资源现在所指的URI。 HTTP 301状态码表示请求的资源…

详解PHP正则表达式中的转义操作

PHP正则表达式中的特殊字符和转义 在 PHP 正则表达式中,有许多特殊字符具有特定的意义。这些特殊字符通常用于定义匹配模式的一部分,或者改变匹配的行为。以下是 PHP 正则表达式中一些常用的特殊字符及其含义: .匹配除换行符之外的任何单个字符 ^在方括…

IDEA如何在线安装一个插件,超简单

前言 我们在使用IDEA开发Java应用时,经常是需要安装插件的,这些各种各样的插件帮助我们快速的开发应用,今天,就来介绍下如何在IDEA中安装插件。 那么,我们该如何安装插件呢? 如何安装插件 首先&#xf…

u盘装win10系统提示“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”解决方法

我们在u盘安装原版win10 iso镜像时,发现在选择硬盘时提示了“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”,直接导致了无法继续安装下去。出现这种情况要怎么解决呢?下面小编分享u盘安装win10系统提示“windows无法安装到这个磁盘…

HarmonyOS开发 - 本地持久化之实现LocalStorage实例

用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。 说明&#x…

重学SpringBoot3-怎样优雅停机

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-怎样优雅停机 1. 什么是优雅停机?2. Spring Boot 3 优雅停机的配置3. Tomcat 和 Reactor Netty 的优雅停机机制3.1 Tomcat 优雅停机3.2 Reac…

【C++初阶】模版入门看这一篇就够了

文章目录 1. 泛型编程2. 函数模板2. 1 函数模板概念2. 2 函数模板格式2. 3 函数模板的原理2. 4 函数模板的实例化2. 5 模板参数的匹配原则2. 6 补充:使用调试功能观察函数调用 3. 类模板3 .1 类模板的定义格式3. 2 类模板的实例化 1. 泛型编程 在C语言中&#xff0…

numpy——数学运算

一、标量——矢量 import numpy as npa 3.14 b np.array([[9, 5], [2, 7]])print(a) print(b)# ---------- 四则运算 ---------- print(a b) # np.add print(a - b) # np.subtract print(a * b) # np.multiply print(a / b) # np.divide 二、矢量——矢量 import nump…

基于边缘计算的智能门禁系统架构设计分析

案例 阅读以下关于 Web 系统架构设计的叙述,回答问题1至问题3。 【说明】 某公司拟开发一套基于边缘计算的智能门禁系统,用于如园区、新零售、工业现场等存在来访被访业务的场景。来访者在来访前,可以通过线上提前预约的方式将自己的个人信息…

CAS的ABA问题

目录 什么是 CAS CAS最主要的用途,实现原子类 基于CAS实现自旋锁 CAS的一个典型缺陷,ABA问题 解决 ABA 问题的方法 什么是 CAS CAS: 全称Compare and swap,字⾯意思:”⽐较并交换“,⼀个 CAS 涉及到以下操作: 我…

基于yolov8的布匹缺陷检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示: 基于yolov8的布匹缺陷检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】_哔哩哔哩_bilibili (一)简介 基于yolov8的布匹缺陷检测系统是在 PyTo…

基于SSM+小程序的童装商城管理系统(商城3)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM小程序的童装商城管理系统实现了管理员及用户。 1、管理员实现了 首页、个人中心、用户管理、分类列表管理、童装商城管理、系统管理、订单管理。 2、用户实现了 注册、登录、首…

一家光伏企业终止,恐不具行业代表性,市占率仅为2.35%

海达光能终止原因如下:报告期内海达光能销售金额较所在行业第二名亚玛顿相差两倍以上,公司毛利率更是远低于行业龙头福莱特,恐难以说明公司行业代表性。在企业竞争上,公司2021年度的市场占有率约为2.35%,公司未来光伏玻…

丁子晴作品《指尖的爱的温度》荣获“金犊奖”全球最佳新锐奖

第33届时报金犊奖颁奖盛典于10月18日在中国成都西部智谷数字体验中心隆重举行。丁子晴的作品《指尖的爱的温度》在激烈的竞争中脱颖而出,荣获了第33届“金犊奖”全球最佳新锐奖。享有盛誉的“金犊奖”是一个全球性的奖项,以其专业严谨、创意水平高的特点,被业界誉为“青年创意的…

kaggle 数据集下载

文章目录 kaggle 数据集下载(1) 数据集下载(2) 手机号验证 kaggle 数据集下载 这两天想学习 kaggle 赛事 把深度学习相关的内容自己给过一遍,快忘得差不多了,惭愧。 参考了好多帖子,使用命令行…

vue2项目在发布后更新,提示用户刷新页面

1、在项目根目录创建resetVersion.js的文件,内容如下 (具体路径可能会有点问题,但是不影响) const path require(path); const fsExtra require(fs-extra);const runBuild async () > {try {const OUTPUT_DIR public; // …