221011 Python学习:模块、导入模块的原理

221011 Python学习:模块、导入模块的原理、包、异常捕获、抛出异常

一、模块

1)什么是模块

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

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

使用前提:

  1. 需要被别的模块使用的模块的模块名必须符合变量名的要求
  2. 导入模块:模块里面的内容必须要先导入再使用
3)怎么导入模块(共5种)
  1. import 模块名 — 导入指定模块,导入后可以通过’模块名.xxx’的方式使用这个模块中的全局变量

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

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

  4. import 模块名 as 新模块名 — 对模块名重命名

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

    # 假设有一个.py文件:demo.py,其中有name,age,height变量
    
    # import demo
    # print(demo.name)
    # print(demo.age)
    
    # from demo import age, height
    # print(age)
    # print(height)
    
    # from demo import *
    # print(name)
    # print(age)
    # print(height)
    
    # import demo as d
    # print(d.name)
    # print(d.age)
    

二、导入模块的原理

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

  2. 阻止导入:

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

    • 阻止的方法:在被导入的模块中添加main对应的if语句,这个if语句里面的代码不会被执行

      """
      if __name__ == '__main__':
          #    将不希望执行的代码放在这里
      """
      
  3. **注意:**同一个模块如果导入多次,模块中的代码只会执行一次(自动查重)

三、包

1)什么是包
  1. python中将包含了_ init_.py文件的文件夹叫做包,它是专门用来管理模块的。
2)怎么使用包中的模块中的内容
  1. import 包名 — 直接导入包,导入后可以通过’包名.xxx’去使用包中_ init_.py文件中的全局变量;

  2. import 包名.模块名 — 导入包中指定的模块,导入后可以用’包名.模块名.xxx’去使用指定模块中的全局变量;

  3. from 包名 import 模块名1, 模块名2, …

  4. from 包名.模块名 import 变量名1, 变量名2, …

    # 假设有一个包:files2,其中有__init__.py模块、test2模块,
    # __init__.py模块中有变量x,test2模块中有age,b变量
    
    # ============================导入方式1==============================
    # import fiels2
    # print(fiels2.x)
    
    # ============================导入方式2==============================
    # import fiels2.test2
    # print(fiels2.test2.age)
    # print(fiels2.test2.b)
    # fiels2.test2.func2()
    
    # import fiels2.test2 as t2       # 重命名
    # print(t2.b)
    # print(t2.age)
    # t2.func2()
    
    
    # ============================导入方式3==============================
    # from fiels2 import test2
    # print(test2.age)
    # print(test2.b)
    # test2.func2()
    
    # ============================导入方式4==============================
    # from fiels2.test2 import b, age
    # print(b)
    # print(age)
    

四、异常捕获

1)什么是异常
  1. 异常就是程序执行过程中报的错。

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

2)异常捕获

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

  1. 异常捕获场景:

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

  2. 捕获异常的语法结构:

    • 第一种:捕获任何类型的异常:

      try:

      ​ 代码段1(需要捕获异常的代码)

      except:

      ​ 代码段2(捕获到异常以后会执行的代码)

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

    • 第二种:捕获特定类型的异常

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

    • 第三种:可以同时捕获多种类型的异常,针对不同的异常做相同的处理

      try:
      代码段1(需要捕获异常的代码)
      except (异常类型1, 异常类型2, 异常类型3, …):
      代码段2(捕获到异常以后会执行的代码)

    • 第四种:可以同时捕获多种类型的异常,针对不同的异常做不同的处理

      try:
      代码段1(需要捕获异常的代码)
      except 异常类型1:
      代码段11
      except 异常类型2:
      代码段22
      except 异常类型3:
      代码段33

  3. 异常捕获的完整结构

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

    try:
        print('abc')        # 执行
    except:
        print('出现异常')
    else:
        print('没有异常')       # 执行
    finally:
        print('最后都执行')      # 执行
    
    print('-------------------------分割线--------------------------')
    
    # 捕获任何类型异常
    try:
        print('abc'[4])
    except:
        print('出现异常')       # 执行
    else:
        print('没有异常')
    finally:
        print('最后都执行')      # 执行
    
    print('-------------------------分割线--------------------------')
    
    # 捕获特定类型异常
    try:
        print('abc'[4])
    except IndexError:
        print('出现异常')       # 报错
    else:
        print('没有异常')
    finally:
        print('最后都执行')      # 执行
    

五、抛出异常

  1. 抛出异常:主动让程序报错,崩溃。

  2. 语法:raise 异常类型

    # 自定义异常类型:
    class AgeError(Exception):			# class类中写函数自定义一个异常类型
        def __str__(self):				# __str__(self)
            return '年龄值有误,正确年龄范围是0岁到150岁!'
    
    age = int(input('请输入正确的年龄(1-150):'))
    if age < 0 or age > 150:
        raise AgeError
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值