• Python----异常处理、断言和路径处理,简单、清晰版


    1.路径处理

    1.找模块:sys.path

    import sys
    
    print(sys.path)
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    - 1.理解

      - 1.是python去查找包或模块
    
      - 2.项目开始根目录,python内置的目录
    
      - 3.虽然说python的安装目录下也可以存放我们写的模块,但是不建议(太多了,不大好找)
    
      - 4.如果以后你发现模块导入不了了 ,可以使用下sys.path
    
      - 5.返回的是一个数组
    
      - 6.用的时候需要导入sys:import sys
    
      - python的目录,主要放外部的库,或者第三方的模块
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    - 2.两种导包的方法再去找

    python学习交流Q群:903971231####
      - 1.from..module ...import 方法、变量等
    
        - from python_basic.class10_路径.pac01.module_012 import a
    
    print(a)
    
    print(sys.path)
    
      - 2.from pac ... import module
    
        - from python_basic.class10_路径.pac01 import module_012
    
    print(module_012.a)
    
    print(sys.path)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    2.获取文件的路径

    • 1.获取绝对路径os.path.abspath(file)
      - import os
    
    # 获取绝对路径
    
    # 固定的写法
    
    # file 表示运行的文件的名称
    
    abs_path=os.path.abspath(file)
    
    print(abs_path)
    
    
    import os
    
    # 当前文件的绝对路径
    abs_path=os.path.abspath(__file__)
    print(abs_path)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    - 2.获取文件的目录路径

     - 1.os.path.dirname(file)
    
        - 不建议用
    
    
    # 获取文件的目录
    dir_name = os.path.dirname(__file__)
    print(dir_name)
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    - 2.os.path.dirname(abs_path)

    - 建议用
    
    • 1
      - dir_name1 =os.path.dirname(file)
    
    dir_name =os.path.dirname(abs_path)
    
    
    abs_path =os.path.abspath(__file__)
    dir_name =os.path.dirname(abs_path)
    print(dir_name)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    - 3.应用场景

    • 例子:假设若需要打开另外一个包pac01下的demo.txt

    • 1.思路

      • 1.获取当前文件的绝对路径

        • abs_path=os.path.abspath(file)
      • 2.获取当前文件的目录路径

        • dir_name =os.path.dirname(abs_path)
      • 3.当前文件的目录路径和pac01进行拼接

        • 1.推荐方法

          • txt_file_path=os.path.join(dir_name,“pac01”,“demo.txt”)

          • PS一般来说,是通过某个文件去获取项目的跟路径

    abs_path = os.path.abspath(__file__)
    dir_name =os.path.dirname(abs_path)
    txt_file_path=os.path.join(dir_name,"pac01","demo006.txt")
    with open(txt_file_path,encoding="utf-8") as f:
        print(f.readlines())
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

      - 2.其他方法:不建议用
    
    • 1
    python学习交流Q群:903971231###
           - # print(dir_name+'/pac01/demo.txt')
    
    # print(dir_name+r'\pac01\demo.txt')
    
            - 这种写法不建议,因为不同的系统,windows一般是\,mac是/,改来改去麻烦
    
        - 4.打开文件并读取
    
          - with open(txt_file_path,encoding="utf8") as f:
    
      print(f.read())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • PS:获取文件路径时,路径或文件不一定要真实存在,了解这即可

    3.工作目录

    • 1.os.getcwd():获取当前的工作目录

      • 1.你在哪个目录下运行python程序,输出的是哪个路径
    print(os.getcwd())
    
    • 1

    在这里插入图片描述

    • 2.os.chdir():切换工作目录

    • 3.os.mkdir(“test_dir”)

      • 创建工作目录

      • os.mkdir(“test_dir”)

    • 4.os.rmdir()

      • 删除工作目录

      • os.rmdir(“test_dir”)

    • 5.listdir()

      • 获取当前路径下的目录列表,返回列表格式数据
        在这里插入图片描述
    print(os.listdir())
    
    • 1

    在这里插入图片描述

    • 6.os.path.isfile()

      • 判断当前文件是否是文件,返回布尔值
    • 7.os.path.isdir

      • 判断当前文件是否是目录,返回布尔值
    print(os.path.isfile(__file__))
    print(os.path.isdir(__file__))
    
    • 1
    • 2

    在这里插入图片描述

    2.异常处理

    1.异常理解

    • 1.程序如果遇到异常,不会再执行

    • 2.写代码的人不能让程序遇到异常就终止运行

      • 1.捕获他catch

        • 改变程序遇到异常的行为,异常处理,希望程序不要终止,按照我说的办,叫做异常的捕获
      • 2.抛出他raise

    2.异常处理

    • 1.异常的捕获

      • 1.基本的写法:

    try:

    你要执行的可能发生异常的代码

    except:

    程序发生异常后,你希望程序做的事情

    - 1.程序先执行try 当中的代码
    
    - 2.但是一旦try当中某个代码报错,会执行跳到except,try剩下的代码不会执行
    
    - 3.例子:
    
      - 1.except捕获了
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    try:
        print("正在运行代码")
    
        a = 1 / 0
    
        print(f"计算结果:{a}")
    
    except:
    
        print("1不能除0,你需要改除数")
    
    print("其他的程序")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    输出的结果是:

    在这里插入图片描述

    在这里插入图片描述

    “”"

      - 2.异常类型的捕获
    
        - 1.没有捕获该类型的情况
    
          - # try:
    
    • 1
    • 2
    • 3
    • 4
    • 5
    try:
    
      print("正在运行代码")
    
      a=1/0
    
      print(f"计算结果:{a}")
    
    except IndexError:
    
      print("1不能除0,你需要改除数")
    
    
    
    print("其他的程序")
    
    # 只会打印 正在运行代码,因为报错了,无法捕获ZeroDivisionError异常,
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

     - 2.捕获到该类型的错误
    
    • 1
    try:
    
      print("正在运行代码")
    
      a=1/0
    
      print(f"计算结果:{a}")
    
    except ZeroDivisionError:
    
      print("1不能除0,你需要改除数")
    
    
    print("其他的程序")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    输出的结果是:

    在这里插入图片描述

    • 3.打印异常信息Exception(或某种类型的报错) as e

      - 1.单个异常的
      
        - # 打印异常信息,一般用此方法
      
      • 1
      • 2
      • 3
    try:
    
      print("正在运行代码")
    
      a=1/0
    
      print(f"计算结果:{a}")
    
    except ZeroDivisionError as e:
    
      print(e)
    
    print("其他的程序")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    输出的结果是:

    在这里插入图片描述
    在这里插入图片描述

        - 2.多个异常的
    
    • 1
    try:
    
      lst = ['yz', 'addd']
    
      lst[3]
    
      a=1/0
    
    
    except ZeroDivisionError as err:
    
      print(err)
    
      print("hello word")
    
    # IndexError: list index out of range
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
          - # 捕获多个时
    
    • 1

    方法1:

    try:
    
      {"name":"zhangsan","age":18}['name1']
    
      lst = ['yz', 'addd']
    
      lst[3]
    
      a=1/0
    
    except (ZeroDivisionError,IndexError,KeyError) as err:
    
      print(err)
    
      print("hello word")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    打印的结果:
    在这里插入图片描述

    方法2

    try:
    
      a = 1 / 0
    
     {"name":"zhangsan","age":18}['name1']
    
      lst = ['yz', 'addd']
    
      lst[3]
    
    except ZeroDivisionError as err:
    
      print(err)
    
      print("ZeroDivisionError")
    
    # 抓到这个异常
    
    # division by zero
    
    # ZeroDivisionError
    
    except IndexError:
    
      print("IndexError")
    
    # 抓到这个异常 IndexError
    
    except KeyError:
    
      print("KeyError")
    
    # 抓到这个异常 KeyError
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    打印的结果:
    在这里插入图片描述

          - 具体用哪个,根据实际情况来
    
    • 1
    • 2.try…finally

      • 1.finally后的代码无论正常与否,都会执行

        • 1.正常的
    try:
    
      1/1
    
      print("正常执行的代码")
    except ZeroDivisionError as e:
    
      print("不能除以0")
    
    finally:
    
      print("无论正常与否,都会执行的代码")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    打印的结果:

    在这里插入图片描述
    在这里插入图片描述

      - 2.异常的
    
    • 1
    try:
    
      1/0
    
      print("正常执行的代码")
    
    except ZeroDivisionError as e:
    
      print("不能除以0")
    
    finally:
    
      print("无论正常与否,都会执行的代码")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    打印的结果:
    在这里插入图片描述

    - 2.常见应用在打开文件后,**关闭文件**
    
      - # 假设demo.py被打开了
    
    • 1
    • 2
    • 3
    import io
    
    try:
    
      f=open("demo.py",'a')
    
      f.read()
    
    except io.UnsupportedOperation as e:
    
      print("文件读取失败")
    
      print(e)
    
    finally:
    
      f.close()
    
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    打印结果:

    文件读取失败

    not readable

    “”"

    • 2.异常的抛出

      • 例子1:
    def adult_add(a,b):
    
      """两个大于等于18的数相加;小于18的不能相加"""
    
      if (a<18) or (b<18):
    
        raise ValueError("参数必须大于或等于18")
    
      c=a+b
    
      return c
    
    adult_add(18,19)
    
    adult_add(3,4) #ValueError: 参数必须大于或等于18
    
    print("函数执行完毕")
    
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    打印结果:

     File ".../demo03_raise.py", line 13, in adult_add
    
      raise ValueError("参数必须大于或等于18")
    
    ValueError: 参数必须大于或等于18
    
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 2.基于上个例子调用:
        - try:
    
      adult_add(3, 4) # ValueError: 参数必须大于或等于18
    
    except:
    
      print("函数执行完毕")
    
    # 打印结果:函数执行完毕
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 3.可用于断言的场景

    3.断言

    1.理解

    - 1.assert后面跟一个条件语句,条件不成立就触发条件异常
    
    - 2.语法:assert 条件表达式
    
    ### 3.例子
    
    - height=int(input("请输入身高:"))
    
    assert height>180
    
    # 断言为真时:请输入身高:181
    
    """
    
    断言为假时:请输入身高:180
    
    Traceback (most recent call last):
    
     File ".../demo04_assert.py", line 9, in
    
      assert height>180
    
    AssertionError
    
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    最后

    今天这篇文章到这里就结束了,喜欢的小伙伴记得点赞收藏。关于这篇文章有不懂的地方记得随时提问

    哟!!!下次见~~~
    在这里插入图片描述

  • 相关阅读:
    Hbase
    【数据结构】期中测试1
    matlab中的mapminmax函数初步理解和应用
    传输线的阻抗和反射到底是什么关系?
    虹科分享 | AR眼镜开启工业创新之旅!
    三十、《大数据项目实战之用户行为分析》Spark SQL实现单词计数
    【云原生之Docker实战】使用Docker部署Piwigo图片管理服务器
    Web of Science怎么用有哪些功能
    C++变量与基本类型
    【Matlab】蒙特卡罗法模拟圆周率+对应解析的GIF生成【超详细的注释和解释】
  • 原文地址:https://blog.csdn.net/xff123456_/article/details/125433033