一、减少出错小技巧

编写一个模块时。
注意顶格写的代码主要是:
- 定义变量
- 定义函数
- 定义类
调用函数,使用变量,尽量不要顶格写。
写在 if name == “main“: 中,例如:
**
print(name)
from lesson12 import lesson11作业
if name == “main“:
print(“主程序”)

输出:
main
lesson12.lesson11作业
主程序

解析:
主程序: main
子模块:导入进来的的模块,import会读取顶格写的代码.

二、路径操作

(1)常用操作

1、获取文件名(相对路径)file

print(file)

2、获取文件绝对路径 os.path.abspath(file)

print(os.path.abspath(file))

3、获取文件父目录路径os.path.dirname()

print(os.path.dirname(os.path.abspath(file)))

4、路径拼接 os.path.join()

  1. ** 需要一级一级的拼接**<br />join_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "join_file")

(2)不常用操作

1、创建目录

不能第二次创建
**
path = os.path.join(os.path.dirname(os.path.abspath(file)), “lesson12”)
os.mkdir(path)

2、判断路径是否真实存在

返回bool, 避免二次创建
**
if not os.path.exists(path):
os.mkdir(path)
else:
print(“已存在”)

3、删除一个目录(不要用)

os.rmdir(path)

4、获取目录路径下的文件和文件夹列表

print(os.listdir(path))

5、判断当前文件是否是目录

返回布尔值

print(os.path.isdir(path))

6、判断当前文件是否是文件

返回布尔值
print(os.path.isfile(path))

三、异常处理

(1)什么是异常

程序发生了意想不到的错误,报错
print(a) # NameError: name ‘a’ is not defined

(2)异常常见的类型

ImportError 无法引入模块或包
IndexError 下表索引超出序列边界
NameError 使用一个还未赋予对象的变量
SyntaxError 代码逻辑语法出错,不能执行 -> 不能去捕获
TypeError 传入的对象类型与要求不符
ValueError 传入一个不被期望的值,即使类型正确
KeyError 试图访问你的字典里不存在的键
IOError 输入输出异常,文件操作
ZeroDivisionError 被0除

SyntaxError
print()

IndexError
[1,2][1000]

KeyError
a = {“a”: 1}
a[“b”]

ValueError
print(int(“a”)) #ValueError: invalid literal for int() with base 10: ‘a’

ZeroDivisionError
3/0

(3)出现异常会如何

程序遇到异常通常会中断

(4)处理异常

1、定位和解决异常的步骤

- 找到异常类型
- 异常分析(看冒号后面的解释)
- 找到出现异常的代码(单击报错行,会跳到相应的位置)

2、异常捕获

1、
a = “1”
b = 2
try:
c = a + b
print(c)
except:
print(TypeError, “数据异常”)

2、
3、
4、

3、主动抛出异常