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

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

时间:2024-10-28 17:19:22浏览次数:6  
标签:Python print 导入 模块 到入 ------ import 异常

一、异常 

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

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

1.1 异常的基本概念

  1. 1、异常类型:Python内置了许多异常类型,如ValueError、TypeError、ZeroDivisionError等,用于表示不同类型的错误情况。此外,你也可以通过继承Exception类或其子类来创建自定义的异常类型
  2. 2、引发异常:使用raise语句可以手动引发一个异常。这可以在检测到某个错误条件时发生,或者仅仅是为了测试异常处理代码
  3. 3、捕获异常:使用try...except结构可以捕获并处理异常。try块包含可能会引发异常的代码,而except块则包含当异常发生时应该执行的代码
  4. 4、传递异常:如果在函数或方法中发生了异常,并且没有在该作用域内被捕获,那么异常会被传递给调用者。这个过程会一直持续到异常被捕获,或者程序因为未处理的异常而终止
  5. 5、异常链:在Python 3中,你可以使用raise ... from ...语法来明确指定一个异常是由另一个异常引发的,从而保留原始的异常信息和追溯信息
  6. 1.2 raise引发的异常

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

标签:Python,print,导入,模块,到入,------,import,异常
From: https://blog.csdn.net/qq_64441210/article/details/143295577

相关文章

  • Python小白学习教程从入门到入坑------第十六课 函数进阶 [作用域、匿名函数](语法基础
    一、作用域在Python中,作用域(Scope)指的是变量、函数和类等标识符可以被访问的代码区域。Python主要有四种作用域,分别是:局部作用域、全局作用域、嵌套作用域注意:1、函数间不能共享内部定义的变量格式2、函数内可以使用全局变量1.1局部作用域定义在函数或方法内部的变量和......
  • 广州糖水甜品店推荐系统的设计与实现 毕业设计程序源码28495
                                  摘要 随着人们生活水平的提高和饮食习惯的多样化,甜品在日常生活中扮演着越来越重要的角色。特别是在中国南方地区,甜品店和糖水店已经成为人们经常光顾的地方,而广州作为美食之......
  • “惠捷”自然灾害救灾物资管理系统 毕业设计程序源码61050
    摘要自然灾害是人类面临的重大挑战之一,它给人们的生命财产安全造成严重威胁。在自然灾害发生后,及时的救灾物资管理是保障人民群众安全的重要举措之一。然而,传统的救灾物资管理方式存在一些问题,如信息不流通、物资分配不公、数据统计不准确等。因此,研究和开发一种高效、便捷......
  • 抖音小程序直播变现:开启流量财富密码
    在当今数字化时代,抖音作为一款极具影响力的短视频平台,不断为用户和创作者提供新的机遇。其中,抖音小程序直播变现成为了众多人关注的焦点,为个人和企业开辟了一条充满潜力的财富之路。一、抖音小程序直播的崛起随着直播行业的持续火热,抖音小程序直播凭借其便捷性、互动性和强......
  • 刚刚,Stable Diffusion 2024升级,最强Ai绘画整合包、部署教程(解压即用)
    2024Ai技术大爆发的元年目前两款Ai神器大火一款是大名鼎鼎的ChatGPT另外一款—StableDiffusion堪称全球最强Ai绘画工具StableDiffusionAi绘画2024版本更新啦!从4.8.7更新至**4.9版本!**更新优化和大模型增加,无需安装,解压即用sd整合包获取方式Stablediffusion......
  • 基于Java实现的就业信息管理系统设计与实现(源码+数据库+文档+部署等)
    文章目录1.前言2.详细视频演示3.程序运行示例图4.文档参考5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue5.3程序操作流程6.选题推荐7.原创毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • 基于Java的校园办公室报修管理系统设计与实现(源码+数据库+LW+部署等)
    文章目录1.前言2.详细视频演示3.程序运行示例图4.文档参考5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue5.3程序操作流程6.选题推荐7.原创毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • 基于Java语言的职业高中智慧作业试题系统的设计与实现(源码+文档+部署视频)
    文章目录1.前言2.详细视频演示3.程序运行示例图4.文档参考5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue5.3程序操作流程6.选题推荐7.原创毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • 网站域名如何申请?有哪些步骤?
    申请一个网站域名究竟需要哪些步骤?无论你是想建立一个个人博客,还是想开设一个在线商店,域名都是你在互联网上的“地址”。那么,如何申请一个网站域名呢?第一步:选择合适的域名在申请域名之前,首先需要思考一个合适的域名。这个域名应该简短、易记,并且能够反映你的网站主题或......
  • centos中docker安装mysql
    用来记录1先升级yumupdate,遇到问题,解决在上篇centos7yum报错Cannotfindavalidbaseurlforrepo:base/7/x86_642安装docker需要的工具包3配置docker的yum源位置报错,网上查询说是因为国内访问不到docker官方镜像,但是直接在网页里打开连接可以下载,换成阿里云后成......