6-python异常、错误、模块、包

文章目录

  • 1.异常
  • 2.错误
  • 3.模块
  • 4.包
  • [综合练习]

1.异常

打开一个不存在的文件会引发异常
FileNotFoundError: [Errno 2] No such file or directory: ‘D:/不存在的文件.txt’

f=open(file="D:/不存在的文件.txt",mode="r", encoding='utf-8')
print(f.read())

(1)异常捕获
可以使用异常捕获,使程序正常执行

在这里插入图片描述

try:
    f=open(file="D:/不存在的文件.txt",mode="r", encoding='utf-8')
except:
    print("文件不存在") # 输出:文件不存在

捕获所有异常
法一

try:
    1/0 # 可替换为其他异常
except:
    print("捕获到了异常") # 捕获到了异常

法二

try:
    1/0 # 可替换为其他异常
except Exception as x:
    print(x) # division by zero
    print("捕获到了异常") # 捕获到了异常

(2)捕获指定异常
异常的种类有很多,如 FileNotFoundError、NameError、ValueError、ZeroDivisionError

print(x) # NameError: name 'x' is not defined

a="str"
i=int(a) # ValueError: invalid literal for int() with base 10: 'str'

print(1/0) # ZeroDivisionError: division by zero

因此可以根据异常类型进行捕获

try:
    print(x)
except NameError as y: # 定义任意变量y用于接收错误信息
    print(y) # name 'x' is not defined
    print("这是NameError异常") # 这是NameError异常

(3)多个except子句
一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。

如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略,即最多只有一个分支会被执行。

如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。

以下程序只会输出:This is NameError

try:
    print(x)  # NameError: name 'x' is not defined(非输出)

    a = "str"
    i = int(a)  # ValueError: invalid literal for int() with base 10: 'str'(非输出)

    print(1 / 0)  # ZeroDivisionError: division by zero(非输出)

except NameError as n:
    print("This is NameError")
except ValueError as v:
    print("This is ValueError")
except ZeroDivisionError as z:
    print("This is ZeroDivisionError")

(4)raise抛出异常
可以使用raise在输出指定语句后继续抛出异常

在这里插入图片描述

若raise加在非第一个抛出的异常的except中,则不会抛出异常

在这里插入图片描述

抛出指定异常

x=5
if x>3:
    raise Exception("引发了异常,x比3大了")

在这里插入图片描述

(5)同时处理多个异常
一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。在try语句中,有一个满足元组内的异常就会执行except语句。

try:
    print(1 / 0)
except (NameError,ValueError,ZeroDivisionError) as nvz:
    print(nvz) # division by zero
    print("NameError/ValueError/ZeroDivisionError") # NameError/ValueError/ZeroDivisionError

(6)try/except…else
else 必须放在所有的 except 子句之后

在这里插入图片描述

try:
    print(1/0)
except:
    print("引发了异常")
else:
    print("继续执行")
# 输出: 引发了异常
try:
    print(1/5)
except:
    print("引发了异常")
else:
    print("继续执行")
"""
0.2
继续执行
"""

(7)try-finally 语句
无论是否发生异常都要执行finally

在这里插入图片描述
(8)异常的传递性
在主函数中调用了f2,f2又调用了f1。在f1中引发了异常,返回f2,再返回主函数,我们可以在主函数位置处理异常(except),这就是异常的传递性

def f1():
    print("this is f1")
    num=1/0
    print("f1 end")
def f2():
    print("this is f2")
    f1()
    print("f2 end")
def main():
    try:
        f2()
    except Exception as e:
        print(e)
main() # 调用

"""
this is f2
this is f1
division by zero
"""

2.错误

错误一般指语法错误/解析错

如下是if语句没有加冒号的错误。语法分析器指出了出错的一行,并且在最先找到的错误的位置标记了一个箭头。

x=6
if x>5
    print(1)

在这里插入图片描述

3.模块

(1)导入整个time模块,包含其中的全部方法

import time
time.sleep(5) # 程序暂停5秒
from time import * 
sleep(5) # 程序暂停5秒

(2)仅导入time的sleep方法

from time import sleep 
sleep(5) # 程序暂停5秒

(3)别名

import time as t
t.sleep(5) # 程序暂停5秒
from time import sleep as t2
t2(5) # 程序暂停5秒

(4)自定义模块
①如下是一个加法函数及调用

def add(a,b):
    print(a+b)
add(2,3) # 5

可以将其改为模块
新建module文件

在这里插入图片描述

写入函数代码

在这里插入图片描述

在主函数中导入模块,即可使用

在这里插入图片描述

②当多个同名函数被调用时,后者会覆盖前者

在这里插入图片描述
在这里插入图片描述

调用module46的减法操作,输出:-1

在这里插入图片描述

③导入模块时会默认执行模块内容

在这里插入图片描述

输出:1
在这里插入图片描述

④导入模块时如果不希望执行模块部分内容

在模块内直接运行时会输出
在这里插入图片描述
而在被导入时不会输出任何内容
原理:在模块内运行时,当前模块视为main函数(即name=main),if判断成立,会执行print语句。当被导入时(相当于调用),name变为module45.py(而不再是main),if判断不成立,不会执行print的语句

在这里插入图片描述
在这里插入图片描述

⑤通过__all__控制import *

通过from module45 import * 可以调用module45.py中的所有的内容
但在module45.py中可以通过列表对 * 的访问进行限制,即重新说明 * 可访问的范围

[例]
module45.py

__all__ = ["f1"] # 只允许调用f1,f2访问不到

def f1():
    print(1)
def f2():
    print(2)
print(3)
if __name__ == "__main__":
    print(4)

main.py

from module45 import *
f1()
f2()

(运行main时)输出:
3
1

首先输出3,在import导入时就会执行
if语句判断不成立,不会输出4
调用f1时属于all声明的内容,可以正常调用,输出1
调用f2时会有如下异常

在这里插入图片描述

4.包

包类似于文件夹,可以包含多个py文件
(选择Python软件包/Python Package)
在这里插入图片描述
在这里插入图片描述

(1)包的导入
在包中有一个加法操作
在这里插入图片描述

导入:import 包名.模块名
调用:包名.模块名.方法名

在这里插入图片描述

(2)使用from导入及调用
导入:from 包 import 模块
调用:模块.方法

from nihao import module
module.add(2,3) # 5

(3)指定功能导入
导入:from 包.模块 import 方法
调用:方法

from nihao.module import add
add(2,3) # 5

(4)使用all控制 *

在这里插入图片描述
在这里插入图片描述

(init文件时默认创建的,用来标识这个文件夹是一个包)
在init中使用all限制 *
这里只允许导入包中的module模块

在这里插入图片描述
*默认导入包中的全部模块

在这里插入图片描述

输出:

在这里插入图片描述

(5)第三方包

在这里插入图片描述
【安装方式一】
以安装numpy包为例

命令提示符输入

pip install numpy

在这里插入图片描述

如果下载速度过慢可尝试以下方法

在这里插入图片描述
导包没有安装提示视为安装成功
在这里插入图片描述
【安装方式二】
在PyCharm的设置中进行安装
在这里插入图片描述
在这里插入图片描述
如果安装速度慢可尝试以下方法
在这里插入图片描述
在这里插入图片描述

[综合练习]

在这里插入图片描述

[解]

在这里插入图片描述

str_util.py

def str_reverse(s):
    return s[::-1]
def substr(s,x,y):
    return s[x:y]

file_util.py

def print_file_info(file_name):
    f=None
    try:
        f=open(file_name,"r",encoding="UTF-8")
    except Exception as e:
        print(f"文件不存在,异常原因为:{e}")
    else:
        print(f.read())
    finally:
        if f:
            f.close() # 如果不要求使用finally,可以将close放到else中
def append_to_file(file_name,data):
    f=open(file_name,"a",encoding="UTF-8")
    f.write(data)
    f.close() # close带有flush功能

main.py (任意测试数据)

from my_utils import str_util
from my_utils import file_util
print(str_util.str_reverse("hello"))
print(str_util.substr("hello",0,3))
file_util.print_file_info("D:/ceshi.txt")
file_util.append_to_file("D:/ceshi.txt","hehe")

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

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

相关文章

springboot-gateway注册nacos失败,控制台没有报错

目录 前言现象描述前言 最近springboot的gateway注册到nacos上,没有注册成功 现象描述 我是在common里面引入了nacos的依赖,依赖如下: <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-confi…

文件的随机读写

fseek fseek这个函数的作用是什么&#xff1f; 我们知道&#xff0c;如果对一个文件指针进行加减操作的话&#xff0c;这个文件指针会指向下一个文件&#xff0c;那么问题来了&#xff0c;我们如果想访问这个文件中的某一个内容&#xff0c;这个时候该怎么办呢&#xff0c;我们…

基于支持向量机SVM的脑部肿瘤识别,脑电波样本熵提取

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 SVM应用实例,基于SVM的的脑部肿瘤识别分类预测 代码 结果分析 展望 支持向量机SVM的详细原理 SVM的定义 支持向量机(support vector machines, SVM)是一种二分类模型,它…

下一代的新操作系统就是ChatGPT!

什么是CHatgpt&#xff1f; ChatGPT是人工智能研究实验室OpenAI在2022年11月30日推出的聊天机器人模型&#xff0c;它使用Transformer神经网络架构&#xff0c;训练数据来自包括维基百科&#xff0c;以及真实对话在内的庞大语料库。2023年1月30日消息称&#xff0c;中国搜索巨…

数据分析-统计基础

day1&#xff1a;集中趋势&#xff0c;离散测度&#xff0c;均值&#xff0c;中位数&#xff0c;众数&#xff0c;方差等。点估计&#xff0c;区间估计等相关的知识 现代数据分析&#xff1a;把数据放到一个数据空间中&#xff0c;通过这个空间的个各种形变与分析而挖掘除数据…

Android RenderScript 浅谈

前言 RenderScript是一个Google出品的&#xff0c;在Android平台上的并行计算框架&#xff0c;官方的简介是说RenderScript运行时可在设备上提供的多个处理器&#xff08;如多核 CPU 和 GPU&#xff09;间并行调度工作。在日常Android开发中&#xff0c;RenderScript主要用于图…

数据库:Redis哨兵及cluster集群部署

一、redis数据库哨兵模式 目录 一、redis数据库哨兵模式 1、什么是哨兵模式 2、哨兵的作用 3、哨兵结构组成 4、哨兵故障转移机制 5、哨兵工作、切换原理 6、哨兵主节点选举原则 7、哨兵模式部署 二、redis数据库cluster集群 1、cluster集群优点、数据存储及同步方式…

Chapter2 : SpringBoot配置

尚硅谷SpringBoot顶尖教程 1. 全局配置文件 SpringBoot使用一个全局的配置文件 application.properties 或者 application.yml &#xff0c;该配置文件放在src/main/resources目录或者类路径/config目录下面&#xff0c; 可以用来修改SpringBoot自动配置的默认值。 yml是YA…

wxml模板,wxss模版,全局配置,页面配置,网络数据请求

WXML 模板语法 1、数据绑定 1.1、数据绑定的基本原则 ① 在 data 中定义数据② 在 WXML 中使用数据 1.2、在 data 中定义页面的数据 在页面对应的 .js 文件中&#xff0c;把数据定义到 data 对象中即可&#xff1a; Page({data: {//字符串数据info:init data}, });1.3、M…

《Kubernetes部署篇:Ubuntu20.04基于containerd部署kubernetes1.24.12单master集群》

一、架构图 如下图所示&#xff1a; 二、环境信息 主机名K8S版本系统版本内核版本IP地址备注k8s-master-621.24.12Ubuntu 20.04.5 LTS5.15.0-69-generic192.168.1.62master节点k8s-worker-631.24.12Ubuntu 20.04.5 LTS5.15.0-69-generic192.168.1.63worker节点k8s-worker-641…

二、SDN-计算机网络专项(2)

1、编码 编码形式&#xff1a; 以太网使用的编码方式为曼彻斯特编码。 2、信息传输速率 &#xff08;1&#xff09;香农定理 带宽为W&#xff08;Hz&#xff09;且有高斯噪音干扰&#xff08;信噪比S/N&#xff09;的信道极限信息传输速率为&#xff1a; 还有&#xff0c;信噪…

Linux_红帽8学习笔记分享_2

Linux_红帽8学习笔记分享_2 文章目录Linux_红帽8学习笔记分享_21.远程控制servera和serverb1.1开启多标签页1.2启用servera和serverb1.3连接servera和serverb2.退出子虚拟机并关机2.1退出子虚拟机2.2关闭虚拟机2.3重启虚拟机3.Linux在使用过程中遇到的基础操作3.1退出至登录界面…

Spring销毁的几种实现

有这3种方法&#xff0c;但是程序执行完成并没有打印出来。一定要手动close.手动执行后会调用如下逻辑&#xff1a;org.springframework.context.support.AbstractApplicationContext#doCloseorg.springframework.context.support.AbstractApplicationContext#destroyBeansorg.…

点亮孙武不夜城 拉响惠民经济新引擎

凡战者&#xff0c;以奇制胜。这次的招商很特别—孙武不夜城招商项目正式启动&#xff01;      无租金、无投资、无风险合伙人制。      现诚邀广大商家合作&#xff0c;相聚不夜城。同此道者&#xff0c;合大志&#xff0c;鸣鼓纳征&#xff0c;亮惠民夜生活&#xf…

一位年薪35W的测试被开除,回怼的一番话,令人沉思

一位年薪35W测试工程师被开除回怼道&#xff1a;“反正我有技术&#xff0c;在哪不一样” 一技傍身&#xff0c;万事不愁&#xff0c;当我们掌握了一技之长后&#xff0c;在职场上说话就硬气了许多&#xff0c;不用担心被炒&#xff0c;反过来还可以炒了老板&#xff0c;这一点…

如何防御恶意流量攻击(CC、DDoS)?

随之网络安全的地位不断提高&#xff0c;越来越多的攻击得以解决&#xff0c;但随之而来的也是新的攻击在变着花样地出现&#xff0c;就好比DDoS攻击与CC攻击就是这些年较为常见的攻击手段&#xff0c;这两种攻击分别针对网站的应用层和网络层。 我们网站运维人员一定要做好功课…

Vue--构建亚马逊多账号的后台数据展示

效果展示&#xff1a; 根据自创的账号个数来创建对应的表格个数 移动到对应商品时展示该商品的日出售变化情况 设计思路&#xff1a; 获取亚马逊平台个人账号数据传入自定义组件<WeekTable> <WeekTable>组件获取到数据后&#xff0c;就会重载DOM元素内容。我们在组…

Ae 入门系列之七:文本动画

Ae 提供了多种制作文本动画的方法。既可以在时间轴面板上基于基本属性手动添加关键帧&#xff0c;还可以使用专门的文本动画制作工具&#xff0c;或者直接使用动画预设。有关文本图层的基础知识请参阅&#xff1a;《Ae&#xff1a;文本图层操作基础》提示&#xff1a;文本动画的…

员工培训Employee Training

前言 加油 原文 员工培训常用会话 ❶ When is our training session? 我们的课程培训在什么时候? ❷ You shouldn’t be absent at training sessions. 你不能缺席课程培训。 ❸ You should follow these rules and regulations. 你应该遵守这些规章制度。 ❺ The staff…

ROS实践11 自定义头文件并调用

文章目录运行环境&#xff1a;思路&#xff1a;1.1 编写头文件1.2 includepath添加头文件路径1.3 编写可执行文件1.4 配置文件1.5 编译运行运行环境&#xff1a; ubuntu20.04 noetic 宏基暗影骑士笔记本 思路&#xff1a; 类和函数&#xff1a; 头文件 声明 可执行文件 定义…