python中模块的引入,包的引入及捕获异常和抛出异常

本文介绍了Python中模块的导入方式,包括import、from...import等,并探讨了导入原理和如何阻止模块重复执行。此外,文章讲解了包的概念及其使用,以及如何捕获和抛出异常,强调了异常处理在程序健壮性中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、模块

1. 什么是模块

python中一个py文件就是一个模块。

2. 如何在一个模块中去使用另外一个模块中的内容

使用前提:
1)需要被别的模块使用的模块的模块名必须符合变量名的要求
2)导入模块 (模块里面的内容必须要先导入再使用)

3.怎么导入模块

  1. import 模块名 ( 导入指定模块,导入后可以通过’模块名.xxx’的方式使用这个模块中的全局变量)

  2. from 模块名 import 变量1,变量2,变量3,… ( 导入指定模块,导入后可以直接使用指定的变量)

  3. from 模块名 import * (导入指定模块,导入后可以直接使用模块中所有的全局变量)

  4. import 模块名 as 新模块名 (对模块重命名)

  5. from 模块名 import 变量1 as 新变量1, 变量2 as 新变量2, … (对变量重命名)

导入方式1:

import test1
print(test1.a)
print(test1.name)
test1.func1()

导入方式2:

from test1 import a, func1
print(a)
func1()
# print(name)     # 报错

导入方式3

from test1 import *
print(a)
print(name)
func1()

导入方式4:

import test1 as t1
print(t1.name)
# print(t1.a)
# t1.func1()

导入方式5:

from test1 import name as n, a, func1
print(n)

二、导入模块原理

1. 导入原理

不管是import还是from-import导入模块的时候,系统都会自动进入指定的模块,将模块中的代码全部执行一遍。

2. 阻止导入

导入模块的时候,不让模块中的所有代码都执行,只执行需要执行的部分。

阻止的方法:在被导入的模块中添加main对应的if语句,把不希望被别的模块执行的代码放到if语句里面

test1模块如下:

a = 100

name = '小明'


def func1():
    print('test1中的函数')

test2模块如下:

def download(name):
    print(f'连接{name}电影对应的服务器')
    print('服务器传输数据')
    print('客户端接收数据')
    print(f'保存{name}数据')
    print('======================================')


# 这个if语句里面的代码在被别的模块导入的时候不会执行。
if __name__ == '__main__':
    for x in range(100):
        download(f'电影{x}')

from test1 import a
from test2 import download

download('肖生克的救赎')
注意:同一个模块如果导入多次,模块中的代码只会执行一次(自动查重)
import test1
import test1
import test2


if __name__ == '__main__':
    pass

三、包

1.什么是包

python中将包好了__init__.py文件的文件夹叫做包,它是专门用来管理模块的。

2.怎么使用包(文件夹)中的模块中的内容

1)import 包名     -   直接导入包,导入后可以用'包名.xxx'去使用包中__init__.py文件中的所有的全局变量
2)import 包名.模块名     -   导入包中指定的模块,导入后可以用'包名.模块名.xxx'去使用指定模块中的所有的全局变量
3)from 包名 import 模块名1,模块名2,...
4)from 包名.模块名 import 变量1, 变量2, ....

files2包下的模块test3如下:

b = 111

age = 18


def func2():
    print('test3中的函数')

导入方式1:

import files2
print(files2.x)

导入方式2:

import files2.test3
print(files2.test3.b)
print(files2.test3.age)
files2.test3.func2()

import files2.test3 as test3
print(test3.b)
print(test3.age)
test3.func2()

导入方式3:

from files2 import test3
print(test3.b)
print(test3.age)
test3.func2()

导入方式4:

from files2.test3 import b, func2
print(b)
func2()

from files2.test.test4 import message
print(message)

四、捕获异常

1. 异常

程序执行过程中报的错就是异常
如果程序执行过程中出现了异常,程序会崩溃,不会再执行后面的代码

print('====')
print('++++')
print('abc'[5])		# 异常报错
print('------')		# 不会被执行

2. 异常捕获

让程序在出现异常的时候不崩溃,还能接着往后执行

  • 1)异常捕获的场景:程序员知道某个位置可能会出现异常(出现异常的原因不是代码本身的问题,而是使用者操作不当等原因),但是又希望在出现异常的时候程序不崩溃还可以接着往后执行,这个时候才需要进行异常捕获。

  • 2)捕获异常的语法结构:

a. 捕获任何类型的异常 
try:
    代码段1(需要捕获异常的代码)
except:
    代码段2(捕获到异常以后会执行的代码)

执行过程:先执行代码段1,如果代码段1出现异常不会报错,而是马上执行代码段2;如果代码段1没有出现异常,代码段2不执行。

b.捕获特定类型的异常
try:
    代码段1(需要捕获异常的代码)
except 异常类型:
    代码段2(捕获到异常以后会执行的代码)
c.可以同时捕获多种异常,针对不同的异常做相同的处理
try:
    代码段1(需要捕获异常的代码)
except (异常类型1, 异常类型2,...):
    代码段2(捕获到异常以后会执行的代码)
d.可以同时捕获多种异常,针对不同的异常做不同的处理
try:
    代码段1
except 异常类型1:
    代码段11
except 异常类型2:
    代码段22
except 异常类型3:
    代码段33
...
try:
    age = int(input('请输入年龄:'))
    if age >= 18:
        print('成年')
    else:
        print('未成年')
    print(age + '岁')
except ValueError:
    print('年龄输入有误!')

3.异常捕获完整结构

try:
    代码段1(需要捕获异常的代码)
except:
    代码段2(捕获到异常后会执行的代码)
else:
    代码段3(没有出现异常会执行的代码)
finally:
    代码段4(无论有没有出现异常也不管异常有没有捕获到,都会执行的代码 - 无论什么情况都会执行)
try:
    print('abc'[4])
except KeyError:
    print('出现异常')
else:
    print('没有出现异常')
finally:
    print('都会执行')

五、抛出异常

1. 抛出异常

主动让程序报错、崩溃

语法:raise 异常类型

自定义异常类型:
class AgeError(Exception):
    def __str__(self):
        return '年龄值有误,正确的年龄范围是0岁到150岁!'


age = int(input('请输入正确的年龄(0~150):'))
if age < 0 or age > 150:
    raise AgeError
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值