zoukankan      html  css  js  c++  java
  • python------模块和包及异常处理

    一、模块

    所有的模块导入都应该尽量往上写,且顺序为:

      a:内置模块

      b:扩展模块

      c:自定义模块

    #my_module.py
    print('from the my_module.py')
    money=1000
    def read():
        print('in my_module->',money)
    
    
    # #test.py导入my_module模块
    # import my_module
    # money = 200
    # my_module.read()
    # # from the my_module.py
    # # in my_module-> 1000
    
    # 模块不会重复被导入 : sys.moudles
    # 从哪儿导入模块 : sys.path
    导入自定义模块

    每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,这样我们在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会在被导入时,与使用者的全局变量冲突

    #测试一:money与my_module.money不冲突
    #demo.py
    import my_module
    money=10
    print(my_module.money)
    
    '''
    执行结果:
    from the my_module.py
    1000
    '''
    测试一:money与my_module.money不冲突
    #测试二:read1与my_module.read1不冲突
    #demo.py
    import my_module
    def read1():
        print('===')
    my_module.read1()
    
    '''
    执行结果:
    from the my_module.py
    my_module->read1->money 1000
    '''
    测试二:read1与my_module.read1不冲突
    #测试三:执行my_module.change()操作的全局变量money仍然是my_module中的
    #demo.py
    import my_module
    money=1
    my_module.change()
    print(money)
    
    '''
    执行结果:
    from the my_module.py
    1
    '''
    测试三:执行my_module.change()操作的全局变量money仍然是my_module中的
    #from import
    # from 模块名 import 变量名
    #直接使用 变量名 就可以完成操作
    #如果本文件中有相同的变量名会发生冲突
    #导入的函数read1,被当前位置定义的read1覆盖掉了
    #demo.py
    from my_module import read1
    def read1():
        print('==========')
    read1()
    '''
    执行结果:
    from the my_module.py
    ==========
    '''
    重命名覆盖的情况

    from 模块名 import 变量名字 as 重命名变量名

    from 模块名 import 变量名1,变量名2

    from 模块名 import *

      将模块中的所有变量名都放到内存中

      如果本文件中有相同的变量名会发生冲突

    from 模块名 import * 和 __all__ 是一对

      没有这个变量,就会导入所有的名字

      如果有all 只导入all列表中的名字


    __name__
    在模块中 有一个变量__name__,
    当我们直接执行这个模块的时候,__name__ == '__main__'
    当我们执行其他模块,在其他模块中引用这个模块的时候,这个模块中的__name__ == '模块的名字'

    二、包
    包是一种通过使用'.模块名'来组织python模块名称空间的方式。
    1.包是目录级的(文件夹级),文件夹是用来组成py文件(包的本质就是一个包含__init__.py文件的目录)
    2.无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,必须提高警觉,知道这是关于包才有的导入语法。
    3.import导入文件时,产生名称空间中的名字来源于文件,import包,产生的名称空间的名字同样来源于文件,即包下的__init__.py

    强调:
      1.在python3中,即使包下没有__init__.py文件,import包仍然不会报错,而在python2中,包下一定要有该文件,否则import包报错
      2.创建包的目的不是为了运行,而是被导入使用。包只是模块的一种形式而已,包即就是模块

    注意事项:
      1.凡是在导入时带点的,点的左边都必须是一个包,否则非法。
      2.对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都是可以用点的方式调用自己的属性)
      3.对比import item 和 from item import name 的应用场景:如果我们想直接使用name,那必须使用后者。
    需要注意的是from后的import导入的模块,必须是明确的一个不能带点,否则会有语法错误

    绝对路径和相对路径的区别:
      绝对路径:不管在包内部还是外部,导入了就能用; 不能挪动,但是直观。
      相对路径:可以随意移动包,只要找到包的位置,就可以使用包里的模块;
           包里的模块如果想使用其它模块的内容只能使用相对路径,使用了相对路径就不能再包内直接执行了。

    三、异常处理
    程序一旦发生错误,就从错误的位置停下来了,不在继续执行后面的内容
    使用try和except就能处理异常
      try是我们需要处理的代码
      except 后面跟一个错误类型 当代码发生错误且错误类型符合的时候 就会执行except中的代码
      except支持多分支
      有没有一个能处理所有错误的类型 : Exception
        有了万能的处理机制仍然需要把能预测到的问题单独处理
        单独处理的所有内容都应该写在万能异常之前
      else : 没有异常的时候执行else中的代码
      finally : 不管代码是否异常,都会执行
        finally和return相遇的时候 依然会执行
        函数里做异常处理用,不管是否异常去做一些收尾工作
    
    
    try:
        print('1111')
        # 1/0
        print('2222')
        # name
        # 2+'3'
        # [][3]
        # {}['k']
        ret = int(input('number >>>'))
        print(ret*'*')
    except ValueError:
        print('输入的数据类型有误')
    except Exception:
        print('你错了,老铁')
    else:
        print('没有异常的时候执行else中的代码')
    print('===========')
    try
    
    
    def func():
        try:
            f = open('file','w')
            ''''''
            return True
        except:
            return False
        finally:
            print('执行finally了')
            f.close()
    
    print(func())
    View Code
     
  • 相关阅读:
    ufw防火墙设置
    [从0到1搭建ABP微服务]
    .Net Core CI/CD环境搭建(正式版)
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
  • 原文地址:https://www.cnblogs.com/huangjm263/p/8268790.html
Copyright © 2011-2022 走看看