掌握模块的基本使用及制作,掌握包的使用,了解模块的发布和安装。

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

本文章来自腾讯云 作者:背雷管的小青年

想要学习Python?有问题得不到第一时间解决?来看看这里“1039649593”满足你的需求,资料都已经上传至文件中,可以自行下载!还有海量最新2020python学习资料。
点击查看

在这里插入图片描述

一、实验目的与要求

1、理解异常的概念,掌握Python中重要的内建异常类以及处理异常的几种方式。

2、掌握raise和assert语句,会抛出自定义的异常,掌握with和as环境安装器的使用。

3、掌握模块的基本使用及制作,掌握包的使用,了解模块的发布和安装。

二、实验原理

在Python中,程序在执行的过程中产生的错误称为异常,比如列表索引越界、打开不存在的文件等。所有异常都是基类Exception的成员,它们都定义在exceptions模块中。如果这个异常对象没有进行处理和捕捉,程序就会用所谓的回溯(traceback,一种错误信息)终止执行,这些信息包括错误的名称(例如NameError)、原因和错误发生的行号。

常见的异常主要有:

(1)NameError:尝试访问一个未声明的变量,会引发NameError;
(2)ZeroDivisionError:当除数为零的时候,会引发ZeroDivisionError异常;
(3)SyntaxError:当解释器发现语法错误时,会引发SyntaxError异常;
(4)IndexError:当使用序列中不存在的索引时,会引发IndexError异常;
(5)KeyError:当使用映射中不存在的键时,会引发KeyError异常;
(6)FileNotFoundError:试图打开不存在的文件时,会引发FileNotFoundError;
(7)AttributeError:当尝试访问未知对象属性时,会引发AttributeError异常。

Python处理异常的能力非常强大。

(1)捕获简单异常:try-except语句定义了监控异常的一段代码,并提供了处理异常的机制;
(2)捕获多个异常:处理多个异常的try-except语句格式如下:

try# 语句块

except 异常名称1# 异常处理代码1

except异常名称2# 异常处理代码

(3)捕获异常的描述信息:当出现多种异常时,为了区分不同的错误信息,可以使用as获取系统反馈的信息;
(4)捕获所有的异常:当程序中出现大量异常时,捕获这些异常是非常麻烦的。这时,我们可以在except子句中不指明异常的类型,这样,不管发生何种类型的异常,都会执行except里面的处理代码;
(5)没有捕获到异常(else):如果try语句没有捕获到任何的错误信息,就不再执行任何except语句,而是会执行else语句;
(6)终止行为(finally):在程序中,无论是否捕捉到异常,都必须要执行某件事情,例如关闭文件、释放锁等,这时可以提供finally语句处理。通常情况下,finally用于释放资源。

在Python中,程序运行出现错误时就会引发异常。要想在程序中主动抛出异常,可以使用raise和assert语句。使用raise语句能显示地触发异常,格式如下:
(1)raise 异常类名;
(2)raise 异常类对象;(这两个引发指定异常类的实例)
(3)raise(重新引发刚刚发生的异常)。Raise语句的具体使用情况如下:使用类名引发异常:当raise语句指定异常的类名时,会创建该类的实例对象,然后引发异常;使用异常类的实例引发异常;传递异常:不带任何参数的raise语句,可以再次引发刚刚发生过的异常,作用就是向外传递异常;指定异常的描述信息;异常引发异常:使用raise…from…可以在异常中抛出另外的异常。

assert语句又称作断言,指的是期望用户满足指定的条件。当用户定义的约束条件不满足的时候,它会触发AssertionError异常,所以assert语句可以当做条件式的raise语句。assert语句格式如下:
在这里插入图片描述
assert后面紧跟一个逻辑表达式,相当于条件。Data通常是一个字符串,当条件为false时作为异常的描述信息。

自定义异常:创建一个继承Exception类的子类,就是自定义异常类。当遇到自己设定的错误时,使用raise语句抛出自定义的异常。

with语句:Python 2.5开始,引入了with语句,with语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源。with语句格式:

with context_expr [as var]:

 with_body

要想使用with语句进行工作,前提是要有上下文管理器。上下文管理器是Python 2.5开始支持的一种语法,用于规定某个对象的使用范围,一旦进入或者离开使用范围,会有特殊的操作被调用。上下文管理协议:enter(self):进入上下文管理器时调用此方法,其返回值被放入with-as语句中as说明符指定的变量中。exit(self, type, value, tb):离开上下文管理器调用此方法。如果有异常出现,type、value、tb分别为异常的类型、值和追踪信息;如果没有异常,3个参数均设为None。此方法返回值为True或者False,分别指示被引发的异常得到了还是没有得到处理,如果返回False,引发的异常会被传递出上下文。上下文管理器:支持上下文管理协议的对象,用于实现__enter__()和__exit__()方法。上下文管理器定义执行with语句时要建立的运行时上下文,负责执行with语句块上下文中的进入与退出操作。通常情况下,使用with语句调用上下文管理器,也可以通过直接调用其方法来使用。运行时上下文: 由上下文管理器创建,通过上下文管理器的__enter__()和__exit__()方法实现。其中,enter() 方法在语句体执行之前进入运行时上下文,exit() 在语句体执行完后从运行时上下文退出。

在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入。基本格式如下:

import module1,mudule2...

如果要导入模块中的函数,其格式如下:模块名.函数名。在调用模块中的函数时,之所以要加上模块名,是因为多个模块中,可能存在名称相同的函数,如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。导入某个模块中的函数,格式如下:from 模块名 import 函数名1,函数名2…。导入某个模块中的所有函数,格式如下:from 模块名 import *。Python解析器搜索模块位置的搜索顺序:
(1)搜索当前目录;
(2)如果都找不到,会继续查看默认路径;
(3)搜索路径被存储在sys模块中的path变量。下列命令可以输出搜索路径:

import sys

print(sys.path)

模块的制作:在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。python提供了一个__name__属性,每个模块都有一个__name__属性,当其值为‘main’时,表明该模块自身在运行,否则是被引用。为了组织好模块,通常会将多个模块放在一个包。包是python模块文件所在的目录,且该目录下必须存在__init__.py文件(文件内容可以为空)。将模块写好后,我们可以将这些模块放在setup.py包中进行发布:
(1)将模块放在setup.py包;
(2)编辑setup.py文件,指明需要包含哪些py文件;
(3)构建模块:python setup.py build;
(4)生成发布压缩包:python setup.py sdist。

当我们的程序中需要引入一些外部模块时,可以从外部下载并安装:
(1)找到模块的压缩包,对压缩包进行解压;
(2)执行命令“python setup.py install”进行安装。

三、预习与准备

1、提前预习Python异常以及模块的语法知识,实验之前编写好程序代码。

2、练习关于Python异常处理以及模块使用的常见操作。

四、实验过程记载

(对实验的主要过程与步骤进行记载;若有较多的截图或代码,可以单独用附件的形式列出)

实验题1 假设成年人的体重和身高存在此种关系:身高(厘米)-100=标准体重(千克)。如果一个人的体重与其标准体重的差值在正负5%之间,显示“体重正常”,其他则显示“体重超标”或者“体重不达标”。编写程序,能处理用户输入的异常,并且使用自定义异常类来处理身高小于30cm、大于250cm的异常情况。

源码:

try:
    length=int(input("请输入你的身高(cm):"))
    weight=int(input("请输入你的体重(kg):"))
    standrd_weight=length-100
    diff_weight=weight-standrd_weight
    assert diff_weight<=0.05 and diff_weight>=-0.05,"体重不正常!"
except AssertionError as reason:
    print(reason)
else:
    print("体重正常")

在这里插入图片描述
实验题2
录入一个学生的成绩,把该学生的成绩转换为A优秀、B良好、C合格、D不及格的形式,最后将该学生的成绩打印出来。要求使用assert断言处理分数不合理的情况,请编写程序。

源码:

while True:
    try:
        score = int(input("请输入你的成绩:"))
        assert score >= 0 and score <= 100, "输入有误请重新输入!"
        if score >= 90:
            print("成绩为:A")
        elif score >= 80 and score <= 89:
            print("成绩为:B")
        elif score >= 60 and score <= 79:
            print("成绩为:C")
        else:
            print("成绩为:D,不及格!!!")

    except AssertionError as reason:
        print(reason)

在这里插入图片描述
实验题3
创建一个模块文件,它用于互换两个数的值。

源码:

ChangValue.py

def change(a,b):
    a,b = b,a
    return a,b
pyTest6_2.py

from 实验 import ChangeValue
a = 1
b = 2
print(ChangeValue.change(a,b))

在这里插入图片描述
实验题4
比较两个文本文件的内容是否相等,用with语句打开文件和进行清理。尝试使用filecmp模块的cmp()函数更快速地进行文件内容的比较。(选做).

import filecmp
s = filecmp.cmp("qin.txt", "jian.txt")
print(s)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值