open异常捕获D10

一、文件操作

1、文件读取

f = open("文件名/文件路径")

f.read() 得到的是一整个字符串

读取模式:mode="r" / mode="rb"

2、文件的写入

mode="w" 覆盖模式 / mode="a" 追加模式 / mode="x" 独创模式(同名文件会报错)

3、文件要记得关闭 f.close()

用 with open( "文件名/文件路径") as f: 

上下文表达式 可以代替文件关闭 自动关闭文件

4、光标

##读取文件是根据光标的移动读取,读取一个字符,就把光标移动一个字符

##写入也是一样的。每写一个字符,就移动一个字符的光标

5、+ 同时具备可读可写

6、f.readlines()  读取每一行 放在列表中 每一行的内容就是一个列表的一个元素

二、异常捕获

格式:

try 要运行的有可能发生异常的代码:
    代码
except 异常:
    出现异常的时候要运行的代码,记录日志等

1、出现了异常,会让他按照事先规定的规则去执行对应的操作:记录错误日志

2、一旦try当中出现异常,立即跳到except子语句,try剩下的代码不会再执行

异常捕获方式:

1) try...except...

2)try...except Exception as e

3)try...except ValueError...

4)try...except(indexError,KeyError)  分组

5)try...except...finally...

抛出异常方式:raise

附带代码:

# 文件处理
# 打开文件读取数据
f = open("demo.txt", encoding="utf-8")  # 打开文件demo.txt
data = f.read()  # 读取文件内容
print(data)
f.close()  # 关闭文件

# 写入文件 在 w 模式下,如果之前没有这个文件,将会创建新文件
# 如果之前已经存在同名文件,使用mode='w'模式会覆盖之前的文件内容,可以使用mode='a' 追加模式
f = open("file.txt", mode="a", encoding="utf-8")
f.write("我最棒啦")
f.close()

# readlines() 读取每一行 存放到列表中 每一行内容就是一个列表的一个元素
# read() 得到的是整个一个字符串
f = open('file.txt')
data = f.readlines()
for line in data:
    print(line.strip())
# with 语句 上下文表达式 上下文管理器 节省关闭文件的操作
with open("file.txt") as f:
    f.read()

# 1)异常捕获

ls = ["yuz"]
try:
    print(ls[3])
except:
    print("出现异常...")

print("hello world!")

# 2)异常捕获
a = 1
b = 0
ls = ["yuz"]
try:
    print(a / b)
    print(ls[2])
except Exception as err:
    print("出现异常:{}".format(err))

print("running...")

# 3)异常捕获
a = 3
b = 0

ls = ["yuz"]

try:
    print(a / b)
    print(ls[3])
except IndexError as err:
    print("出现异常:{}".format(err))
except ZeroDivisionError as err:
    print("出现异常:{}".format(err))
finally:
    print("hello world!")


# raise
def join_team(age, gender):
    if age > 22:
        raise ValueError("age must be 小于 22")
    print("可以加入足球队!")


join_team(23, '女')

作业:

1. 异常捕获的语法是什么样的?    请列举你会的错误类型。
2. 输入用户的体重身高,计算 bmi, (规则前面作业有)
考虑异常情况
3.编写如下程序
优化去生鲜超市买橘子程序
a.收银员输入橘子的价格,单位:元/斤
b.收银员输入用户购买橘子的重量,单位:斤
c.计算并且 输出 付款金额
新需求:
d.使用捕获异常的方式,来处理用户输入无效数据的情况

上期答案:

# 简答题
# 1、什么是全局变量?
# ## 在函数体外面的变量
# 2、什么是局部变量?
# ## 在函数体内部的变量
# 特例:global
# 3、函数内部如何修改全局变量(如何声明全局变量 )?
# c = 5
# def add(a, b):
#     global c
#     c -= 3
#     return a + b + c
#
# print(add(3, 5))
# 4、写出已经学过的所有python关键字,分别写出用途?
# import keyword
# print(keyword.kwlist)
# ['False', 'None', 'True', 'and', 'as', 'assert','async',
# 'await', 'break', 'class', 'continue', 'def', 'del', 'elif',
# 'else', 'except', 'finally', 'for', 'from', 'global', 'if',
# 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass',
# 'raise', 'return', 'try', 'while', 'with', 'yield']
# False/True 判断bool值
# None 无返回内容时,打印None
# and/in/not/or 放在判断语句中,获取bool值
# elif/else/if 条件判断
# for/while 循环
# break/continue/pass 停止循环/跳出本次循环/占坑
# def/return 定义函数/函数返回值;停止函数
# global 声明全局变量
# import 引入模块


# 简答题
# # 写出你接触过的内置函数,并说明他们的作用。
# # input()/print()/type()/format()
# # int()/float()/str()/bool()/list()/set()/dict()/tuple()
# # min()/max()/len()/sorted()/lst.sort()/enumerate()
# # range()/eval()


# .编写如下程序
# 有以下数据来自于一个嵌套字典的列表(可自定义这个列表),例如:
# person_info = [{"name":"yuze", "age": 18, "gender": "男", "hobby": "假正经", "motto": "I am yours"} ,  .... 其他]
# 创建一个txt文本文件,来添加数据
#
# a.第一行添加如下内容:
# name,age,gender,hobby,motto
#
# b.从第二行开始,每行添加具体用户信息,例如:
# yuze,17,男,假正经, I am yours
# cainiao,18,女,看书,Lemon is best!

# def user_info(person_info, filename):
#     file = open(filename, mode="w+", encoding="utf-8")
#     for key in person_info[0]:
#         file.write(key)
#         file.write(" ")
#
#     file.write("\n")
#     for i in range(len(person_info)):
#         for value in person_info[i].values():
#             file.write(value)
#             file.write(" ")
#         file.write("\n")
#
#     file.close()
#
#
person_info = [{"name": "yuze", "age": 17, "gender": "男", "hobby": "假正经", "motto": "I am yours"},
               {"name": "cainiao", "age": "18", "gender": "女", "hobby": "看书", "motto": "Lemon is best!"}]
# user_info(person_info, "user_info.txt")


# # 老师
# ### 获取每一行数据,列表转化成行的字符串形式;[{}, {}]==>name,yuz
# def get_value_lines(info):
#     lines = ""
#     for person in info:
#         line = []
#
#         for e in person.values():
#             line.append(str(e))
#
#         line_str = ','.join(line) + '\n'
#         lines += line_str
#     return lines
#
#
# print(get_value_lines(person_info))
#
#
# def main():
#     with open("user.txt", "w+") as f:
#         f.write("name,age,gender,hobby,motto\n")
#
#     data = get_value_lines(person_info)
#     with open("user.txt", "a", encoding="utf-8") as f:
#         f.write(data)
#
#
# main()


# # 编写如下程序
# # 有两行数据,存放在txt文件里面(手动建立文件,并添加如下数据):
# # url:/futureloan/mvc/api/member/register@mobile:18866668888@pwd:123456
# # url:/futureloan/mvc/api/member/recharge@mobile:18866668888@amount:1000
# # 请利用上课所学知识,把txt里面的两行内容,取出然后返回如下格式的数据:(可定义函数)
# # [{'url':'/futureloan/mvc/api/member/register','mobile':'18866668888','pwd':'123456'},
# # {'url':'/futureloan/mvc/api/member/recharge','mobile':'18866668888','amount':'1000'}]

# def txt_ls(filename):
#     file = open(filename, "r")
#     results = file.read()
#     result = results.split("\n")
#
#     ls = []
#     for res in result:
#         re = res.split("@")
#         dic = {}
#         for r in re:
#             end = r.split(":")
#             dic[end[0]] = end[1]
#         ls.append(dic)
#
#     return ls
#
#
# print(txt_ls("info.txt"))

# # 老师
# def convent_to_dict(line):
#     """字符串转化成 字典"""
#     infos = line.split("@")
#     info_dict = {}
#     for info in infos:
#         info_list = info.split(":")
#         info_dict[info_list[0]] = info_list[1]
#     return info_dict
#
#
# f = open("demo.txt", encoding="utf-8")
# # lines = f.readlines()
#
# lines = f.read().split("\n")
#
# new_lines = []
# for line in lines:
#     new = convent_to_dict(line.strip())
#     new_lines.append(new)
# # print(new_lines)


# # 附带:重点重点重点!!!!!
# # 列表转化成字符串;字符串转换成列表
ls = ["name", "age", "favor"]
s = ",".join(ls)
print(s)
lst = s.split(",")
print(lst)
  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值