zoukankan      html  css  js  c++  java
  • 2019.04.18 异常和模块

    1引入异常处理

      异常和文件比较密切一点吗

      不对呀,解释器会给我们报错的呀!抛出异常是让用户看吗   为什么还要学异常呢

      不对,解释器报的是语法错误,是我们写错的语法,有些不按照要求来,我们要提示他按照要求来的

      语法错误那是系统扔出来的异常

      

    try    except(反对,除什么之外)

    判断是不是整数   isdigit()

    使用if else  增加容错处理   但是会增加业务逻辑 业务核心偏移

    异常抛出就是在except 中提示所有会出现的错误,而if  else   会把这些一个个会出现的错误写出来

    把会出现的错误的代码放在try中

    出现了错误之后,应该怎么执行防在except

    把这些问题直接提示,而不是再用if  else 什么之类的去解决

    2多个except的用法

      如果我设置了异常处理,他是会先处理我的异常处理的。最后才是解释器报错

      啥呀,我又不知道错误类型,怎么匹配

      父类Exception  上面的错误类型都没匹配,就执行这个父类异常

      这个异常还是和顺序有关的  子类在前,父类在后

      

    3except多个异常的用法

      元祖表达式  这个是没有顺序要求的

      print(“e.args”) 打印错误信息

    4.try-except-else-fianlly

      'w'只是说打开原文件的时候是会清空的,不是不追加。然后write,只能将字符串数据写入文件

      没有关闭文件:会导致数据丢失,数据混乱

    5.异常处理的传递机制

      怎么说就是传递过程中的异常,应该怎么处理

      不处理的话  传递过程中是不会执行后面的语句了

      在错误的地方会往上找的,找到有抛出的try

      异常机制的流程

    6.抛出自定义异常

      如何自定义异常

      就是要创建异常类,继承异常类才可以

      为什么要定义这个私有属性,因为我要控制这个数值,不能随意的给值

      这是要设置私有属性,所以得有get,和set呀  不然怎么获取和修改

      重写父类方法,我就可以用啦呀

      抛出异常()raise    我自己写的异常也属于Exception吗?

      为什么要自定义自己的东西,当学习到一定程度确实是要自己写一写东西的,不能一直用别人的

      在私有赋值判断中else   raise抛出异常

      在构造函数中直接调用下面的实例方法  self.setGender(gender)

    7.模块的引入

      一个模块只会被导入一次,不管你执行了多少次import

      from语句让你从模块中导入一个指定的部分到当前命名空间中,导入之后,

      被导入的方法可以直接使用方法名完成调用,不再需要模块名

      模块中所有内容引入  from   import*语法

      

    8.模块的使用

      如何使用,import  模块名.变量

      导入模块中相关的数据

      form 模块  import 变量,函数,类   直接使用

      记得有个命名空间的  我记得是每个py文件都会有个一个这个的

      random.randint(1,6)   生成随机数  范围是1~6之间

    9.自定义模块的定义以及使用

      自定义  就是自己定义的py文件呗

      占位符  &g  是数字吗?

      问题:在导入模块的时候,模块中的代码会被执行一遍

      如何解决:if __name__ = '__main__'   当我运行自己的文件是我的__name__是__main__

      因为我要导入模块,而导入时,我的模块又被运行一遍,但是这次的__name__是__MyMath__

      是我自己的文件名   所以我可以根据这个判断我是在执行自己的文件的时候,还是别人导入我的模块的时候执行的,这样就可以把一些print,之类的放到判断中

    10.__all__的使用

      手动添加全局变量之后   __all__ = []  from   import *  就不是全部导入了

      而是导入__all__列表中的所包含的功能   []里边是要以字符串作为传入  python3 不提倡使用

    11.package的使用

      包和模块有什么区别

      包有什么作用:防止模块名冲突   将模块归类,方便整理

      那我如何使用包,使用里边的模块   也是一样的吧,只是调用的时候多了包名 

      这样才能识别一样的模块名

    包是一个分层次的文件目录结构,它定义了一个由模块及子包,
    和子包下的子包等组成的 Python 的应用环境,包中要包含一个__init__.py模块

    12.__init__.pyde 使用

       初始化模块   首次试用包中的模块是,__init__.py模块会被执行一次

      一般会写一些辅助代码:

        让你更方便的使用模块

      在测试文件中

      import 包   在包的__init__.py模块中  import 模块

      这种方式等价于;在测试中  使用import 包.模块

    在测试文件中  from 包  import *

    在__init__.py     from .MyMath import *      相当于from 包.模块 import *

    13.怎么做到模块的跨项目使用

      路径不一样呀sys.path    为什么我在每个项目调random都可以呢?没有存在路径的问题

      自定义模块不可以,切换项目之后不可用,系统模块就可以

      导入模块,系统会自己搜索找到这个模块  sys.path   导入模块是,搜索路径列表

      解决:将模块所在路径,手动加入到sys.path 中

         将自定义模块,发布到系统目录,

    14.自定义模块跨项目使用第一种解决方案

      因为sys.path是一个列表,所以直接添加就好了   

      可以循环打印sys.path 的所有路径

      发现:路径分隔符两种表示方式:'/'   ,   '\'     因为右斜线有转义的意思,所以可能路径会有问题,所以用两个表示  

      当我导入import 模块时     sys.path  会执行看是否存在这个中

      所以要先添加才能使用  

      不提示不怎么好  

    15.自定义魔铠跨项目使用第二种解决方案

      1.确定的发布的模块(目录结构)

       --setup.py

       --package1

        --自定义模块 MyMath

      2.setup的编辑工作

        setup()函数

      3.构建模块

        python setup.py  build   建立

        将package  和setup.py  拷贝到桌面  然后cmd切换到该目录下

        python  setup.py build   会生成一个文件

      4.发布模块

        python setup.py sdist   解压安装

        继续cmd中python setup.py

        然后就有了一个安装包

    16.安装发布的模块到系统文件

      通过命令完成安装(推荐)更安全

      解压刚才创建好的文件夹  然后在cmd中进入这个目录

      python setyp.py install

    17.自定义模块的暴力安装

      直接将要安装的包,以及模块,赋值对应的系统目录中

      直接拷贝package这个包  丢到site-packages中

    18.模块引入问题(那些模块可以被引入)

      append加进来的是在最后,然后还有就是我们项目的文件目录是首先被搜的

      所以当我们自己也创建了一个random.py  当导入的时候是导入的是我们自己的

    19.使用原生IDE解决模块重载的问题

      集成环境已经处理了呀! 就是我导入的模块 可以添加了一些新的功能能不能同步呢

      是可以的   但是原生的IDE不可以  需要  form imp import reload

                         reload(目标模块)

                        重新调用

    20.==与is的使用

      == :比较两个值是否相等

      is:用来表示两个变量是否同一个

      

      这是在pycharm中的   a超过了256也是一样的  应该是吧那个什么扩大了小整数池:全局共享一份

      pycharm和原生IDE还是有点差别的 

     这么有意思吗 list1[0] is list1[0]   这还是数值比较  只要在小整数池中都可以

    21.copy与deepcopy的使用

      没创建一个对象,都会对应该一个地址

      

    22.进制转换问题

      

    """
    十进制:
    0~9
    二进制:
    0~1

    八进制:
    0~7

    十六进制:
    0~9 A~F

    进制转换:
    十进制转其他进制(除以对应进制,直到0为止,倒着取余数,)
    十进制->二进制
    bin()
    '0b1100100'





    十进制->八进制
    oct()
    '0o144'
    十进制->十六进制
    hex()
    '0x64'

    其他进制转十进制
    int('目标字符串',对应的进制)->对应的十进制数字(int)

    十进制转十进制
    365 5*10^0 + 6*10^1 + 3*10^2 = 365


    二进制->十进制
    1011 -> 1* 2^0 + 1 * 2^1 + 0 * 2^2 + 1 * 2^3
    1 + 2 + 0 + 8 = 11
    八进制->十进制
    12 = 2*8^0 + 1*8^1 = 10

    十六进制->十进制
    2A = A*16^0 + 2*16^1 =
    10 + 32 = 42
    """
      V4 = int(‘0b1100100’2)

     

    23.原码反码补码的问题

      

    """
    原码反码补码:
    1 - 1 = 0

    1 + -1 = 0

    0000 0001
    1000 0001
    -----------
    1000 0010

    正数:
    原码=反码=补码

    +1的补码 0000 0001

    负数:
    最高位为符号位
    原码:1000 0001
    反码:1111 1110(原码,除符号为之外,所有位数取反)
    补码:1111 1111(反码+1)

    1000 0000
    1000 0001
    补码-》反码
    继续取反+1

    0000 0001
    1111 1111
    ----------

    24 位运算符的使用

      

    """
    位运算符:
    <<:
    a << n
    a*2^n
    >>:
    8 >> 2 =
    a >> n
    a // 2^n
    &:
    两个二进制的操作数,全为1结果为1,其他情况,为0
    |:
    两个二进制的操作数,只要有一个为1,结果为1,都为0的时候,结果为0
    ^:
    两个二进制的操作数,相同为0,不同为1
    对同一个数字异或两次,能够得到它本身

    ~:

    """

    25 属性私有化问题

      私有方法不能在外部访问是因为改名了吗

      _Person__age

      私有属性/私有方法

      名字重整(改名)

      重整的原则;

        _类名__私有属性名

    """
    属性私有化的问题:
    1.xx
    一般情况下使用的变量
    2._xx
    _PI = 3.14
    在某个模块中,如果变量是_xx形式的,
    使用from import *的方式,无法使用

    3.__xx

    私有属性/私有方法
    名字重整(改名)
    重整的原则:
    _类名__私有属性名
    _类名__私有方法名
    4.__xx__
    主要用于方法
    __init__
    __del__
    __new__
    __str__
    Magic Methond
    自定义方法避免与魔法方法重名
    5.xx_
    用来区分变量名/方法名

    """

    26 使用property简化私有属性的访问方式

      get  和set  就是开放修改,和查看接口

      property简化这种私有方法,属性的接口方式

    """
    property的使用:
    私有属性,提供开放接口,供外界进行访问
    """
    age = property(getAge,setAge)


    27@property简化私有属性的访问方式 

      

    """
    装饰器:
    简化私有属性的访问方式
    @property
    @属性.setter

    """


    总结:异常和模块没什么好说 注意一些问题就好了 会用简单就可以了
  • 相关阅读:
    MySQL---exists检查数据库对象是否存在
    MySQL---自查询
    MySQL---多表查询
    等待元素
    单元测试---testsuite对象
    mysql--事务
    untieeest方法
    线性,模块,数据,关键字的作用
    selenium中隐式等待和显示等待的区别
    软件测试的原则
  • 原文地址:https://www.cnblogs.com/Py-king/p/10732734.html
Copyright © 2011-2022 走看看