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 别名

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT界面开发--我的第一个windows窗体【菜单栏、工具栏、状态栏、铆接部件、文本编辑器、按钮、主界面】

经过前面的铺垫,今天我们就开始我们图形化界面之旅了,我们的第一个窗体主要包括:菜单栏、状态栏、工具栏、铆接部件、还有Qt提供的一些主窗体的API。 第一部分:主界面(QMainWindow) 当创建好项目后,我们直接运行&…

logdata-anomaly-miner:一款安全日志解析与异常检测工具

关于logdata-anomaly-miner logdata-anomaly-miner是一款安全日志解析与异常检测工具,该工具旨在以有限的资源和尽可能低的权限运行分析,以使其适合生产服务器使用。 为了确保 logdata-anomaly-miner的正常运行,推荐安装了python > 3.6的…

Qt 文本文件读写与保存

Qt 文本文件读写与保存 开发工具&#xff1a;VS2013 QT5.8 设计UI界面&#xff0c;如下图所示 sample7_1QFile.h 头文件&#xff1a; #pragma once#include <QtWidgets/QMainWindow> #include "ui_sample7_1QFile.h"class sample7_1QFile : public QMainWin…

中国人寿财险青岛市分公司:保障民生,传递关爱

中国人寿财险青岛市分公司以保障民生为使命&#xff0c;传递关爱与温暖。 在健康险领域&#xff0c;公司为市民提供全面的医疗保障。从重大疾病保险到普通医疗保险&#xff0c;满足不同客户的需求。通过与医疗机构合作&#xff0c;为客户提供便捷的就医服务和理赔服务&#xf…

Linux下的文件IO操作

目录 1.前导 1.1文件知识 1.2对比一下文件操作和重定向 1.2.1输入重定向 1.2.2追加重定向 1.3当前路径 1.4stdin stdout stderr 2.文件操作的系统调用接口 2.1.open()打开文件 2.1.2.flags参数 2.1.3.mode参数 2.1.3 umask()函数 2.2.write()向文件写入 ​编辑 2…

【Kaggle | Pandas】练习1:创造、阅读和写作

文章目录 1. 创建DataFrame2. 创建数据表3. 创建可变Series表4. 读取csv 数据集5. 保存csv 文件 1. 创建DataFrame 在下面的单元格中&#xff0c;创建一个 DataFrame fruits &#xff0c;如下所示&#xff1a; import pandas as pd # Your code goes here. Create a datafr…

Javaee---多线程(一)

文章目录 1.线程的概念2.休眠里面的异常处理3.实现runnable接口4.匿名内部类子类创建线程5.匿名内部类接口创建线程6.基于lambda表达式进行线程创建7.关于Thread的其他的使用方法7.1线程的名字7.2设置为前台线程7.3判断线程是否存活 8.创建线程方法总结9.start方法10.终止&…

Spring《声明式事务》

知识点&#xff1a; Spring 声明式事务 1.基于注解和配置类的Spring-jdbc环境搭建 1. 准备项目&#xff0c;pom.xml <dependencies> <!--spring context依赖--> <!--当你引入Spring Context依赖之后&#xff0c;表示将Spring的基础依赖引入了--> …

七款主流图纸加密软件强力推荐|2024年CAD图纸加密保护指南

在当今信息化的设计行业&#xff0c;保护CAD图纸的知识产权和数据安全变得尤为重要。随着越来越多的企业采用数字化设计和共享文件&#xff0c;如何防止CAD图纸被未经授权的访问和窃取成为了许多设计师和企业关注的焦点。为此&#xff0c;选用合适的图纸加密软件是保护CAD文件安…

《数据结构》学习系列——树(下)

系列文章目录 目录 树和森林的遍历树的遍历森林的遍历基本算法递归先根遍历树迭代先根遍历树树和森林的层次遍历 压缩与哈夫曼树文件编码扩充二叉树哈夫曼树和哈夫曼编码哈夫曼树的基本思路哈夫曼编码 树和森林的遍历 树的遍历 先根遍历&#xff1a;先访问树的根结点&#x…

想作弊❓用这个发起考试,根本没法作弊

&#x1f389; 推荐一款超实用的在线考试神器 —— 土著刷题✨ 如果你正在寻找一个既方便又高效的在线考试平台&#xff0c;那么“土著刷题”小&#x1f34a;序绝对值得一试&#xff01;它不仅完全免费&#xff0c;而且操作简单&#xff0c;非常适合用来组织线上测试。 &#x…

使用Angular构建动态Web应用

&#x1f496; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4bb; Gitee主页&#xff1a;瑕疵的gitee主页 &#x1f680; 文章专栏&#xff1a;《热点资讯》 使用Angular构建动态Web应用 1 引言 2 Angular简介 3 安装Angular 4 创建Angular项目 5 设计应用结构 6 创建组件 7 …

「Java SPI机制应用快速入门」: 一种JDK内置的服务提供发现机制

文章目录 什么是SPISPI机制的应用使用方法使用规范 入门案例 什么是SPI SPI首先是一种机制&#xff0c;这个机制叫&#xff1a;服务提供发现机制。那是谁来负责发现呢&#xff1f;当然是JDK内置的服务帮助我们发现啦。发现了帮助我们去调用&#xff0c;我们要做的就是在中间去…

2024护理类科技核心期刊汇总(最新版)

2024年9月中国科技核心期刊目录&#xff08;2024年版&#xff09;正式公布&#xff0c;13本护理类期刊入选。常笑医学整理了这13本护理类科技核心期刊的详细参数&#xff0c;以及投稿经验&#xff0c;供大家在论文投稿时参考&#xff0c;有需要的赶紧收藏&#xff01; 1.《中华…

SwiftUI(四)- 布局(VStack、HStack、ZStack)

引言 页面的搭建和布局在应用开发中几乎占据了一半的代码量。定于iOS开发而言&#xff0c;相较于其它平台&#xff0c;UIKit的布局方式显得相对局限&#xff0c;通常只有绝对布局和相对布局两种方案。而在Flutter或者Android开发中&#xff0c;布局选项更为丰富&#xff0c;比…

【mod分享】极品飞车9冬日mod,支持光追,想体验一把冬天的Rockport市吗

各位好&#xff0c;今天小编给大家带来一款新的高清重置魔改MOD&#xff0c;本次高清重置的游戏叫《极品飞车9最高通缉》。 《极品飞车&#xff1a;最高通缉》作为一款2005年的游戏&#xff0c;《极品飞车&#xff1a;最高通缉》的画面效果还是可以的&#xff0c;效果全开之后…

【状态机DP】力扣1186. 删除一次得到子数组最大和

给你一个整数数组&#xff0c;返回它的某个 非空 子数组&#xff08;连续元素&#xff09;在执行一次可选的删除操作后&#xff0c;所能得到的最大元素总和。换句话说&#xff0c;你可以从原数组中选出一个子数组&#xff0c;并可以决定要不要从中删除一个元素&#xff08;只能…

手机拍证件照,换正装有领衣服及底色的方法

证件照在我们的职业生涯的关键节点是经常会用到的&#xff0c;比如毕业入职、人事档案建立、升迁履历、执业资格考试和领证等&#xff0c;这些重要的证件照往往要求使用正装照&#xff0c;有时候手头没有合适的衣服&#xff0c;或者原先的证件照背景色不符合要求&#xff0c;就…

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…

优选算法精品课--双指针算法(2)

双指针算法&#xff08;2&#xff09; 1、有效三角形的个数1.1 题目解析1.2 思路解析1.3 代码实现 2、和为s的两个数2.1 题目解析2.2 思路解析2.3 代码实现 3、三数之和3.1 题目解析3.2 思路解析3.3 代码实现 4、四数之和4.1 题目解析4.2 思路解析4.3 代码实现 5 总结 1、有效三…