"""
一、模块导入
1、概念
   包:__init__.py 文件是包的标识符,__init__.py会自动执行
   模块:.py结尾的文件就叫模块
   结构:项目/包/模块
2、模块导入
   2.1、模块分类
       python自带模块:time
       第三方模块:requests
       自定义的模块
   2.2、语法
       import 模块名称:导入某个py文件
       from 模块名称 import 类名称、函数名称、变量(标识符):一步到位,常用
       *:表示导入所有的变量、函数、类
   2.3、自动导包
        windows:alt+回车
        mac:option+回车
   2.4、导包可能遇到的问题
        导入包有语法提示,红波浪线:pycharm包管理--包(右键)---Mark Directory as -- sources root
        打开的根目录有多个项目,也会出问题:from 项目名称.模块名称 import 类名称、函数名称、变量(标识符)
   2.5、查看python环境变量
        import sys
        print(sys.path)

"""
"""
一、路径处理【很重要】
1、获取路径
   1.1、获取当前文件的绝对路径(文件)[常用]
        print(__file__)
   1.2、获取当前文件所在目录的绝对路径(目录)[常用]
        result = os.path.dirname(__file__)
   1.3、当前工作路径(工作路径可以使用os.chdir()进行切换)
        res = os.getcwd()
   1.4、返回指定文件的绝对路径
        res = os.path.abspath("demo01.py")

2、路径拼接[掌握]
   os.path.join(path1,path2.....)
   2.1、不显示添加\,会自动补齐
        path1="member"
        path2="login"
        path3="index.html"
        res = os.path.join(path1,path2,path3)
   2.2、显示添加\,按你添加的为准,多个路径会以最后一个路径的为开始路径(会认为是绝对路径),前面的会丢弃掉
        每个路径都加了\,会以最后一个为准,前面的会被舍弃掉
        import os
        path1="member"
        path2="\login"
        path3="index.html"
        res = os.path.join(path1,path2,path3)
        print(res)

3、其他方法【了解】
os.mkdir(path,mode)创建目录 【不用】
os.chdir(path)   切换工作目录【不用】
os.rmdir(path)   删除空目录【不用】
os.listdir(path) 返回指定路径下的文件或者目录
os.path.isdir()  判断是否是目录
os.path.isfile()  判断是否是文件

4、魔术方法
   4.1、__file__:当前文件的绝对路径【掌握】
   4.2、__name__:获取函数的名称
   4.3、__doc__:获取函数的注释内容(多行注释)
   4.4、__dict__:获取对象的所有属性【掌握】


"""
"""
一、什么是异常
1、当程序在运行过程中遇到了一个错误,无法执行了,出现一些提示,或者是报错信息,这就是异常

2、常见异常
NameError: name 'name' is not defined
SyntaxError: unexpected EOF while parsing
IndexError: list index out of range
KeyError: '10'

2、异常捕获【掌握】
   2.1、try:...except:
       try:
            print(name_list["10"])
            print(name_list["key"])
            print(name_list["key"])
            print("可能出现异常的代码")
       except:
            print("代码执行报错之后执行的代码")
   2.1、finally
       try:
            #print(name)
            print("可能执行报错的代码")
        except:
            print("代码执行报错之后执行的代码")
        finally:
            print("不管代码执行是否报错都会执行的代码")    
   2.3、else
        try:
            #print(name)
            print("可能执行报错的代码")
        except:
            print("代码执行报错之后执行的代码")
        else:
            print("代码执行不报错的时候执行这里的代码")   
   2.4、traceback
        try:
            print(name)
            print("可能执行报错的代码")
        except Exception as e :
            print(e)
            print(traceback.print_exc())
            print("代码执行报错之后执行的代码")
        else:
            print("代码执行不报错的时候执行这里的代码")
   2.5、raise 【框架中会继续讲】    
       try:
            #print(name)
            print("可能执行报错的代码")
        except Exception as e :
            raise Exception("这里是异常")
"""