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

news2024/11/28 8:42:38

一、异常 

在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.coloradmin.cn/o/2227621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用非官方的根组件

文章目录 1. 知识回顾2. 使用方法2.1 源码分析2.2 常用属性3. 示例代码4. 内容总结我们在上一章回中介绍了"Get包简介"相关的内容,本章回中将介绍GetMaterialApp组件.闲话休提,让我们一起Talk Flutter吧。 1. 知识回顾 我们在上一章回中已经介绍过GetMaterialApp组…

Python(pandas库3)

函数 随机抽样 语法: n:要抽取的行数 frac:抽取的比例,比如 frac0.5,代表抽取总体数据的50% axis:示在哪个方向上抽取数据(axis1 表示列/axis0 表示行) 案例: 输出结果都为随机抽取。 空…

Qt/C++ 调用迅雷开放下载引擎(ThunderOpenSDK)下载数据资源

目录导读 前言ThunderOpenSDK 简介参考 xiaomi_Thunder_Cloud 示例ThunderOpenSDK 下载问题 前言 在对以前老版本的exe执行程序进行研究学习的时候,发现以前的软件是使用的ThunderOpenSDK这个迅雷开放下载引擎进行的项目数据下载,于是在网上搜索一番找到…

Chrome谷歌浏览器加载ActiveX控件之allWebDesktop控件介绍

背景 allWebDesktop控件是一款方便用户在线打开各类文档的OA办公控件。它设计比较轻巧,充分利用计算机程序资源打开文档,并将程序窗口嵌入到allWebDesktop控件区域内,从而实现浏览器内打开各类文档效果。 allWebPlugin中间件是一款为用户提供…

【工具】Charles对360浏览器抓包抓包

Charles 和 switchy sharp 配合,可以对 Chrome 进行抓包也可以配合对360安全浏览器抓包。 本文以Windows 电脑中的配置为例,介绍如何实现抓包。(Mac中操作基本一致) 1.安装Charles 可根据自己的电脑下载对应的版本:…

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

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

【JavaEE初阶】网络原理—关于TCP协议值滑动窗口与流量控制,进来看看吧!!!

前言 🌟🌟本期讲解关于TCP协议的重要的机制“连接的建立和断开”~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 &#x1…

5. STM32之TIM实验--输出比较(PWM输出,电机,四轴飞行器,智能车,机器人)--(实验5:PWM驱动直流电机)

作者:Whappy,日期:2024.10.29,决战STM32 直流电机的控制就比较简单了,只有数据线和地线,正接正转,反接反转,为了方便,本实验采用H桥电路来控制电机的正反转,H桥电路也很简单,就是4个MOS管构成的2路推挽输出电路. 注:基本上大功率器件,单片机基本上是无法驱动的,都是要靠一部分…

家用wifi的ip地址固定吗?换wifi就是换ip地址吗

在探讨家用WiFi的IP地址是否固定,以及换WiFi是否就意味着换IP地址这两个问题时,我们首先需要明确几个关键概念:IP地址、家用WiFi网络、以及它们之间的相互作用。 一、家用WiFi的IP地址固定性 家用WiFi环境中的IP地址通常涉及两类&#xff1a…

Python——自动化发送邮件

在数字化时代,电子邮件是商务沟通和个人联络的重要工具。自动化邮件发送可以节省时间,提高效率。Python,作为一种强大且灵活的编程语言,提供了多种库来支持邮件的自动化发送。本文将详细介绍如何使用Python的smtplib和email库来编…

DRC-20开发指南:新一代区块链代币标准

区块链技术自比特币诞生以来,迅速发展成为全球科技与金融领域的创新中心。随着区块链技术的普及,数字代币作为一种新兴的数字资产类别,逐渐为更多人所熟知。从ERC-20到BRC-20,代币标准的演进一直在推动着区块链生态系统的创新与发…

从零开始的JavaScript基础!

目录 一、JavaScript 的概述 二、如何在HTML页面中使用JS (一)、行内式 (二)、内嵌式 (三)、外链式 (四)、基本执行顺序 1.从上到下线性执行: 2.阻塞行为&#x…

“格格不入”的星瑞东方曜,燃油市场有麻烦了

文/王俣祺 导语:在新能源汽车蓬勃发展的当下,吉利近日推出的星瑞东方曜可以说有些“格格不入”了。那么,这款被称为“10万以内唯一选择”的新车,究竟带来了哪些新变化,又会给燃油市场中苦苦坚持的“战友们”带来多大的…

【ACM出版,EI稳定检索,九大高校联合举办, IEEE Fellow支持】2024年计算机视觉与艺术研讨会(CVA 2024)

在线投稿:学术会议-学术交流征稿-学术会议在线-艾思科蓝 2024年计算机视觉与艺术国际学术会议(CVA 2024)作为2024年人工智能、数字媒体技术与交互设计国际学术会议(ICADI 2024)的分会。此次大会旨在汇聚全球在计算机视觉与艺术…

【MySql】-0.1、Unbunt20.04二进制方式安装Mysql5.7和8.0

1、下载Mysql二进制报(选择Linux的通用版本) mysql官网地址:https://downloads.mysql.com/archives/community/ wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.26-linux-glibc2.12-x86_64.tar wget https://downloads.…

H7-TOOL的LUA小程序教程第16期:脉冲测量,4路PWM,多路GPIO和波形打印(2024-10-25, 更新完毕)

LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用&#xff…

【Cri-Dockerd】安装cri-dockerd

cri-dockerd的作用: 在k8s1.24之前。k8s会通过dockershim来调用docker进行容器运行时containerd,并且会自动安装dockershim,但是从1.24版本之前k8s为了降低容器运行时的调用的复杂度和效率,直接调用containerd了,并且…

java实现的音视频格式转化器

一、前言 最近写了一款图形界面版的音视频格式转化器&#xff0c;可以实现将多种视频之间进行转化&#xff0c;非常好用&#xff0c;如将AVI转换为&#xff0c;TS&#xff0c;FLV&#xff0c;MP4等。音频可将MP3转成WAV。 二、实现 1.需引入相关maven依赖。 <!-- 核心包 -…

Java知识巩固(十二)

I/O JavaIO流了解吗&#xff1f; IO 即 Input/Output&#xff0c;输入和输出。数据输入到计算机内存的过程即输入&#xff0c;反之输出到外部存储&#xff08;比如数据库&#xff0c;文件&#xff0c;远程主机&#xff09;的过程即输出。数据传输过程类似于水流&#xff0c;因…

1.3 面向对象 C++面试问题

1.3.1 简述一下什么是面向对象,面向对象与面向过程的区别 什么是面向对象 面向对象&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;是一种编程范式&#xff0c;它通过将现实世界中的实体抽象为“对象”来组织代码。面向对象编程关注对象及其交互&#x…