Python基础学习Day24

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语法错误
TabErrorTab 和空格混用
SystemError一般的解释器系统错误
UnicodeErrorUnicode 相关的错误
UnicodeDecodeErrorUnicode 解码时的错误
UnicodeEncodeErrorUnicode 编码时错误
UnicodeTranslateErrorUnicode 转换时错误
以下为警告类型
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格式不同之处

  1. 数据类型限制
    • JSON:支持的数据类型包括对象(类似于字典)、数组(类似于列表)、字符串、数字、布尔值和 null。JSON 不支持 Python 特有的数据类型如 tuple、set、bytes 等。
    • Python 字典:可以包含多种 Python 特有的数据类型,比如 tuple、set、bytes 等。
  2. 格式要求
    • 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格式不同之处

  1. 数据类型限制
    • JSON:支持的数据类型包括对象(类似于字典)、数组(类似于列表)、字符串、数字、布尔值和 null。JSON 不支持 Python 特有的数据类型如 tuple、set、bytes 等。
    • Python 字典:可以包含多种 Python 特有的数据类型,比如 tuple、set、bytes 等。
  2. 格式要求
    • JSON:数据必须以字符串的形式表示,键必须是双引号括起来的字符串,值可以是字符串、数字、布尔值、数组、对象或 null。
    • Python 字典:键可以是任意不可变的类型(如字符串、数字、元组),值可以是任意类型。键通常用单引号或双引号括起来,但 Python 允许在字典中使用不加引号的键。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值