zoukankan      html  css  js  c++  java
  • Python9-模块2-包的进阶-day21

    包是一种通过使用‘.模块名’来组织python模块名称空间的方式。

    1. 无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法

    2. 包是目录级的(文件夹级),文件夹是用来组成py文件(包的本质就是一个包含__init__.py文件的目录)

    3. import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件

    强调:

      1. 在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错

      2. 创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包即模块

     

    注意事项

    1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。

    2.对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。

    3.对比import item 和from item import name的应用场景:
    如果我们想直接使用name那必须使用后者。

    相对路径和绝对路径

    使用绝对路径,不管在包内部还是外包 导入了就能使用
    使用相对路径,可以随意移动包,只要能找到包的位置,就可以使用包里的模块
    包里的模块如果也是用了相对路径就不能执行了
    包里的模块如果想使用其他模块的内容只能使用相对路径,使用了相对路径就不能在包内直接执行了

    import sys
    import  os
    sys.path.append(os.path.dirname(os.getcwd()))   #添加path路径
    from core import core
    # print(sys.path)
    # print(os.path.dirname(os.getcwd()))
    if __name__ == '__main__':
       core.main()

     

     异常处理

    什么是异常?
    异常之后的代码就不执行了
    什么是异常处理?
    python解释器检测到错误,触发异常(也允许程序员自己触发异常)
    程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)
    如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理
    使用try和except就能处理异常
    try是我们需要处理的代码
    except后面跟一个错误类型,当代码发送错误且错误类型符合的时候,就会执行except里面的代码
    except支持多分枝
    万能异常 在python的异常中,有一个万能异常:Exception,他可以捕获任意异常
    有了万能的处理机制仍然需要把能预测到的问题单独处理
    单独异常处理的所有内容都应该写在万能异常之前
    else:没有异常的时候执行else中的代码
    finally:不管代码是否异常,都会执行
    finally和return相遇的时候,依然会执行
    函数里做异常处理用,不管是否异常去做一些收尾工作
    如何进行异常处理?
    try:
    被检测的代码块
    except 异常类型:
    try中一旦检测到异常,就执行这个位置的逻辑
    '''
    try:
        ret = int(input('number >>> '))
        print(ret*'*')
    except  ValueError:
        print('输入的不对')
    try:
        print('1111')
        # 1/0
        # print('qqqq')
        # name
        # [][2]
        ret = int(input('number >>> '))
        print(ret*'*')
    # except ValueError:
    #     print('value-error')
    except  Exception as error:
        print('输入的不对',error)
    else:
        print('没有异常的时候执行else中的代码')
    finally:
        print('不管代码是否异常,都会执行')
  • 相关阅读:
    LeetCode 1122. Relative Sort Array (数组的相对排序)
    LeetCode 46. Permutations (全排列)
    LeetCode 47. Permutations II (全排列 II)
    LeetCode 77. Combinations (组合)
    LeetCode 1005. Maximize Sum Of Array After K Negations (K 次取反后最大化的数组和)
    LeetCode 922. Sort Array By Parity II (按奇偶排序数组 II)
    LeetCode 1219. Path with Maximum Gold (黄金矿工)
    LeetCode 1029. Two City Scheduling (两地调度)
    LeetCode 392. Is Subsequence (判断子序列)
    写程序判断系统是大端序还是小端序
  • 原文地址:https://www.cnblogs.com/zhangtengccie/p/10349379.html
Copyright © 2011-2022 走看看