Python异常
-
作用
用作信号通知,通知上层调用者有错误产生需要处理
1. try 语句
- 语法
try:
可能发生异常的语句块
except 错误类型1 [as 变量名1]:
异常处理语句块1
except 错误类型2 [as 变量名2]:
异常处理语句块2
...
except 错误类型n [as 变量名n]:
异常处理语句块n
except:
异常处理语句块other
else:
未发生异常的语句
finally:
最终的处理语句
-
作用
尝试捕获异常,得到异常通知,将程序由异常状态变为正常状态
-
说明
except 子句可以有 1个或多个
except: 不给错误类型,可以匹配全部的错误类型
else 子句里的语句会在 没有错误发生时执行,当处于异常时不执行
finally 子句里的语句,无论何时都执行
-
示例
try:
x = int(input("请输入一个整数:"))
print('x=', x)
except ValueError:
print('您的输入不能转成整数')
print("程序结束")
2. raise 语句
-
问题
# 写一个函数, get_score 函数,读取用户输入的整数成绩, # 成绩的正常值是0~100 之间, 要求, 如果不在0~100 之间 # 报 ValueError类型的错误 def get_score(): x = int(input('请输入成绩:')) if 0 <= x <= 100: return x raise ValueError -
语法
raise 异常类型 或 raise 异常对象 -
作用
- 抛出一个错误,让程序进入异常状态
- 发送错误通知给调用者
-
示例:
## 写一个函数, get_score 函数,读取用户输入的整数成绩,
## 成绩的正常值是0~100 之间, 要求, 如果不在0~100 之间
## 报 ValueError类型的错误
def get_score():
x = int(input('请输入成绩:'))
if 0 <= x <= 100:
return x
# raise ValueError
raise ValueError('用户输入的成绩不在 0~100 之间')
try:
score = get_score()
print(score)
except ValueError as err:
print("成绩输入有误 err=", err)
err的作用就是接收raise ValueError(‘用户输入的成绩不在 0~100 之间’)给出的提示信息
-
异常类型的可选种类
详见:
>>> help(__builtins__)
3.Python全部的错误类型
| 错误类型 | 说明 |
|---|---|
| ZeroDivisionError | 除(或取模)零 (所有数据类型) |
| ValueError | 传入无效的参数 |
| AssertionError | 断言语句失败 |
| StopIteration | 迭代器没有更多的值 |
| IndexError | 序列中没有此索引(index) |
| IndentationError | 缩进错误 |
| OSError | 输入/输出操作失败 |
| ImportError | 导入模块/对象失败 |
| NameError | 未声明/初始化对象 (没有属性) |
| AttributeError | 对象没有这个属性 |
| GeneratorExit | 生成器(generator)发生异常来通知退出 |
| TypeError | 对类型无效的操作 |
| KeyboardInterrupt | 用户中断执行(通常是输入^C) |
| OverflowError | 数值运算超出最大限制 |
| FloatingPointError | 浮点计算错误 |
| BaseException | 所有异常的基类 |
| SystemExit | 解释器请求退出 |
| Exception | 常规错误的基类 |
| StandardError | 所有的内建标准异常的基类 |
| ArithmeticError | 所有数值计算错误的基类 |
| EOFError | 没有内建输入,到达EOF 标记 |
| EnvironmentError | 操作系统错误的基类 |
| WindowsError | 系统调用失败 |
| LookupError | 无效数据查询的基类 |
| KeyError | 映射中没有这个键 |
| MemoryError | 内存溢出错误(对于Python 解释器不是致命的) |
| UnboundLocalError | 访问未初始化的本地变量 |
| ReferenceError | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
| RuntimeError | 一般的运行时错误 |
| NotImplementedError | 尚未实现的方法 |
| SyntaxError Python | 语法错误 |
| TabError | Tab 和空格混用 |
| SystemError | 一般的解释器系统错误 |
| UnicodeError | Unicode 相关的错误 |
| UnicodeDecodeError | Unicode 解码时的错误 |
| UnicodeEncodeError | Unicode 编码时错误 |
| UnicodeTranslateError | Unicode 转换时错误 |
| 以下为警告类型 | |
| Warning | 警告的基类 |
| DeprecationWarning | 关于被弃用的特征的警告 |
| FutureWarning | 关于构造将来语义会有改变的警告 |
| OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
| PendingDeprecationWarning | 关于特性将会被废弃的警告 |
| RuntimeWarning | 可疑的运行时行为(runtime behavior)的警告 |
| SyntaxWarning | 可疑的语法的警告 |
| UserWarning | 用户代码生成的警告 |
详见:help(builtins)
Python文件操作
文件操作是Python中常见的任务之一,用于创建、读取、写入和管理文件。以下是一些常见的文件操作任务的思路、总结和示例代码:
1. 打开文件
要执行文件操作,首先需要打开文件。使用open()函数可以打开文件,指定文件名以及打开模式(读取、写入、追加等)。
# 打开一个文本文件以读取内容
file = open("example.txt", "r")
2. 读取文件
一旦文件被打开,可以使用不同的方法来读取文件内容。
# 读取整个文件内容
content = file.read()
# 逐行读取文件内容
for line in file: #直接遍历文件对象,每次读取一行。这种方式更内存友好,因为不需要将所有行读入内存。
print(line)
with open('example.txt', 'r') as file:
lines = file.readlines() # 读取文件的所有行,并将其作为一个列表返回。
for line in lines:
print(line, end='') 代码和file = open("example.txt", "r")for line in file:
print(line) 代码的区别
3. 写入文件
要写入文件,需要打开文件以写入模式(‘w’),然后使用write()方法。
# 打开文件以写入内容
file = open("example.txt", "w")
# 写入内容
file.write("这是一个示例文本。")
4. 关闭文件
完成文件操作后,应该关闭文件,以释放资源和确保文件的完整性。
file.close()
5. 使用with
更安全的方法是使用with语句,它会自动关闭文件。
with open("example.txt", "r") as file:
content = file.read()
# 文件自动关闭
6. 检查是否存在
可以使用os.path.exists()来检查文件是否存在。
import os
if os.path.exists("example.txt"):
print("文件存在")
7. 处理异常
在文件操作中,可能会出现各种异常情况,例如文件不存在或没有权限。在文件操作中捕获这些异常是个好习惯。
try:
with open("example.txt", "r") as file:
content = file.read()
except FileNotFoundError:
print("文件不存在")
except Exception as e:
print(f"发生错误:{e}")
这些是文件操作的一些常见思路和示例代码。请根据你的具体需求和场景来调整代码。在进行文件操作时,要确保小心处理文件,以避免意外数据损坏或文件损坏。
除了打开、读取和写入文件之外,还有一些其他常见的文件操作,如复制、删除和改变文件名。以下是这些操作的思路和示例代码:
8. 复制文件
要复制文件,你可以使用shutil模块的copy方法。
import shutil
source_file = "source.txt"
destination_file = "destination.txt"
shutil.copy(source_file, destination_file)
9. 删除文件
要删除文件,可以使用os模块的remove方法。
import os
file_to_delete = "file_to_delete.txt"
if os.path.exists(file_to_delete):
os.remove(file_to_delete)
print(f"{file_to_delete} 已删除")
else:
print(f"{file_to_delete} 不存在")
10. 修改名称
要改变文件名,可以使用os模块的rename方法。
import os
old_name = "old_name.txt"
new_name = "new_name.txt"
if os.path.exists(old_name):
os.rename(old_name, new_name)
print(f"文件名已更改为 {new_name}")
else:
print(f"{old_name} 不存在")
Python JSON 数据解析
JSON(JavaScript Object Notation)是一种轻量级数据交换格式,它易于阅读和编写,同时也易于机器解析和生成。Python提供了内置的JSON模块,用于处理JSON数据。
1. 导入模块
import json
2. 序列化
import json
data = {
"name": "John",
"age": 30,
"city": "New York"
}
json_str = json.dumps(data) # json.dumps() 是 Python 的 json 模块中的一个函数,它的作用是将 Python 对象转换为 JSON 格式的字符串。
print(json_str)
3. 反序列化
json_str = '{"name": "John", "age": 30, "city": "New York"}'
data = json.loads(json_str) # json.loads() 是 Python json 模块中的一个函数,它的作用是将 JSON 格式的字符串转换为 Python 对象。
print(data)
4. 对象存文件
data = {
"name": "John",
"age": 30,
"city": "New York"
}
with open('data.json', 'w') as json_file:
json.dump(data, json_file)
5. 从文件加载
with open('data.json', 'r') as json_file:
data = json.load(json_file)
print(data)
6. 嵌套JSON数据
如果JSON数据包含嵌套结构,您可以使用递归来访问和修改其中的值。
json_data = {
"name": "Alice",
"info": {
"age": 25,
"location": "Paris"
}
}
# 获取嵌套的值
age = json_data["info"]["age"]
# 修改嵌套的值
json_data["info"]["location"] = "New York"
# 将更改后的数据转换为JSON字符串
new_json_str = json.dumps(json_data)
7. JSON中列表
JSON可以包含列表,可以使用索引来访问列表元素。
json_data = {
"fruits": ["apple", "banana", "cherry"]
}
# 获取列表中的第一个水果
first_fruit = json_data["fruits"][0]
# 添加一个新水果到列表
json_data["fruits"].append("orange")
8. JSON中空值
JSON允许表示空值(null),在Python中,它通常转换为None。
# 在定义json空值时需要指定为None
json_data = {
"value": None
}
# 转换为json对象后,空值自动转换为null
print(json.dumps(json_data))
# 输出:
# {"value": null}
字典和JSON格式不同之处
- 数据类型限制:
- JSON:支持的数据类型包括对象(类似于字典)、数组(类似于列表)、字符串、数字、布尔值和 null。JSON 不支持 Python 特有的数据类型如 tuple、set、bytes 等。
- Python 字典:可以包含多种 Python 特有的数据类型,比如 tuple、set、bytes 等。
- 格式要求:
- JSON:数据必须以字符串的形式表示,键必须是双引号括起来的字符串,值可以是字符串、数字、布尔值、数组、对象或 null。
- Python 字典:键可以是任意不可变的类型(如字符串、数字、元组),值可以是任意类型。键通常用单引号或双引号括起来,但 Python 允许在字典中使用不加引号的键。
25,
“location”: “Paris”
}
}
获取嵌套的值
age = json_data[“info”][“age”]
修改嵌套的值
json_data[“info”][“location”] = “New York”
将更改后的数据转换为JSON字符串
new_json_str = json.dumps(json_data)
## 7. JSON中列表
JSON可以包含列表,可以使用索引来访问列表元素。
```python
json_data = {
"fruits": ["apple", "banana", "cherry"]
}
# 获取列表中的第一个水果
first_fruit = json_data["fruits"][0]
# 添加一个新水果到列表
json_data["fruits"].append("orange")
8. JSON中空值
JSON允许表示空值(null),在Python中,它通常转换为None。
# 在定义json空值时需要指定为None
json_data = {
"value": None
}
# 转换为json对象后,空值自动转换为null
print(json.dumps(json_data))
# 输出:
# {"value": null}
字典和JSON格式不同之处
- 数据类型限制:
- JSON:支持的数据类型包括对象(类似于字典)、数组(类似于列表)、字符串、数字、布尔值和 null。JSON 不支持 Python 特有的数据类型如 tuple、set、bytes 等。
- Python 字典:可以包含多种 Python 特有的数据类型,比如 tuple、set、bytes 等。
- 格式要求:
- JSON:数据必须以字符串的形式表示,键必须是双引号括起来的字符串,值可以是字符串、数字、布尔值、数组、对象或 null。
- Python 字典:键可以是任意不可变的类型(如字符串、数字、元组),值可以是任意类型。键通常用单引号或双引号括起来,但 Python 允许在字典中使用不加引号的键。

2万+

被折叠的 条评论
为什么被折叠?



