Python-Go 文件操作和异常操作

news2024/10/6 21:29:51

目录

python的异常操作

异常是什么?

错误与异常的区别:

常见异常

Traceback 错误回溯 

异常处理

异常处理的定义(try - except)

扩展(可以捕获不同的错误、多except语句)(else - finally的使用)

finally分支存在的意义是什么

raise 触发异常

python的文件操作

打开文件-关闭文件

open(参数1:文件名,参数2:打开方式(可读可写,只读,只写),参数3:编码方式)

打开方式:r、rw、w、a、r+

读取文件内容的方式:readlines()、read()、readline()

在文件操作中添加异常处理(try: except)

with 打开文件的方式 --》with语句执行完毕,自动关闭文件

练习一: 从键盘接收10行数据,以行为单位写入到文件test2.txt中

练习二:通过ip请求淘宝的一个接口获取到省份和运营商

go 异常处理 

GO中的两种异常:Error、Panic

error示例一:

使用 if err != nil 进行判断(error类型),然后对异常进行处理

error示例二:

如果是非常严重的错误,Panic(恐慌)

defer进行异常处理

Panic示例:


python的异常操作

异常是什么?

异常是指意外或错误的事件,可能导致程序中断、崩溃或产生不可预测的结果。

错误与异常的区别:

错误是 --》代码执行过程中出现了一些Error,导致代码中断

语法错误 => 可预知(错误是可预知的)

异常是  => 代码执行的过程中出现不可预期的错误

异常处理的目的是如果出错了,不退出程序,继续运行程序

常见异常

# a = 1
# b = 0
# c = a/b
# 错误:ZeroDivisionError: division by zero(被除数不能为0)

# a:
# SyntaxError: invalid syntax(语法错误)

#  a = 1
# b = 1
# IndentationError: unexpected indent (缩进错误)

# li = [1,2,3,4]
# print(li[8])
# IndexError: list index out of range(列表超出范围)

# dic = {}
# print(dic["a"])
# KeyError: 'a'(a这个key是不存在的)

Traceback 错误回溯 

Traceback 错误回溯是 Python 解释器在程序发生异常时所提供的一种错误信息展示方式。当程序抛出异常但没有被捕获和处理时,Python 解释器会显示 Traceback 错误回溯信息以帮助开发者定位和调试错误。

异常处理

异常处理的定义(try - except)

#程序捕获错误,自己处理
try:
    # 可能会出现异常的代码
    fp = open("test.txt")
    print("代码结束")

#出现异常情况,执行except
#except 捕获所有异常
except :
    # 如果出错了,就会执行except部分
    print("不好意思,出错了")

#打印具体的错误信息是什么
# Exception 异常(Exception)是指在程序执行过程中遇到的所有意外或异常情况,可以表示所有的异常
except Exception as ex:
    # 如果出错了,就会执行except部分
    print("不好意思,出错了", ex)

扩展(可以捕获不同的错误、多except语句)(else - finally的使用)

# 可以根据错误的类型分别捕获不同的错误
# 多个except语句分别捕获不同的错误类型
# 从前到后匹配,如果匹配到一个,就会直接退出
# 父类错误类型(Exception)需要写到子类错误类型(ValueError)的后面

# 可以根据错误的类型分别捕获不同的错误
# 多个except语句分别捕获不同的错误类型
# 从前到后匹配,如果匹配到一个,就会直接退出
# 父类错误类型(Exception)需要写到子类错误类型(ValueError)的后面
try:
    print("start....")
    1/0
    int("abc")
    a = [1,2,3]
    a[10]
# 捕获 ValueError
except ValueError as ex:
    print("int函数只能接收int字符串", ex)
# 捕获 ZeroDivisionError
except ZeroDivisionError as ex:
    print("被除数不能为0", ex)
# 捕获任意错误 Exception
except Exception as ex:
    print("出错了", ex)

# 如果try没有出错,就会执行else分支
else:
    print("代码没有出现任何错误")

# 不管try部分是否出错,finally都会执行
finally:
    print("不管try部分是否出错,我都会执行")
# finally分支存在的意义是什么

finally分支存在的意义是什么

不管try部分是否出错,finally都会执行

# (比如说你打开文件的时候,出现错误了,但是except里面没有关闭文件,因此你需要使用finally来最后关闭文间)

def funcd():
    #开辟了一个上下文空间
    try:
        print("start")
        print("这里打开了一个文件")
        #错误
        1/0
    except:
        print("出错了")
        return False
    finally:
        print("关闭文件")
funcd()

raise 触发异常

# raise 触发异常
def funcf(idcard):
    try:
        # 接收一个身份证号码,返回生日
        if len(idcard) != 11:
            #添加触发异常(自定义函数的时候,遇到了不合法的参数,并且计算出现异常了,导致无法正确给出返回结果)
            raise ValueError("身份证号码不合法")
            #可以触发异常
        else:
            return idcard[6:14]
    except ValueError as ex:
        print("出现ValueError异常,异常是:", ex)

birthday = funcf("123413123")
print("你的生日是:",birthday)

python的文件操作

打开文件-关闭文件

open(参数1:文件名,参数2:打开方式(可读可写,只读,只写),参数3:编码方式)

打开方式:r、rw、w、a、r+

读取文件内容的方式:readlines()、read()、readline()

# r --》读
# w --》写 (如果文件不存在,它会帮助我们创建一个新文件,如果文件存在,它会清空原来文件的内容,添加新内容)
# rw --》读写
# a --》 追加(在文件末尾追加内容)
# r+ --》读写(如果文件不存在,它会报错,如果文件存在,它会将需要添加的数据添加到我们的光标位置,不会覆盖文件)

#参数1:文件名 参数2:打开方式(可读可写,只读,只写),参数3:编码方式
#fp --> 文件句柄
fp = open("test.txt","r",encoding="utf-8")
#读取文件内容
# 将整个文件全部读取出来
#readlines() --》以列表的方式读取出来 --》list
#从光标当前位置以列表的形式读取出来
content1 = fp.readlines()
print(type(content1), content1)
#read
#从光标当前位置开始读取文本,直到读取到末尾 --》 str
#移动文件指针(移动到文件开头)
fp.seek(0)
content2 = fp.read()
print(type(content2), content2)

#移动文件指针(移动到文件开头)
fp.seek(0)
#readline 从光标当前位置开始读取文本,每次只读取一行
line = fp.readline()
print(type(line), line)

#关闭文件
fp.close()

在文件操作中添加异常处理(try: except)

#添加异常处理(try: except)
try:
    print("打开文档")
    fp = open("test1.txt", "r", encoding="utf-8")
    content3 = fp.readlines()
    print(content3)
except FileExistsError as ex:
    print("文件不存在",ex)
except Exception as ex:
    print("出现异常", ex)
finally:
    print("关闭文档")
    fp.close()

with 打开文件的方式 --》with语句执行完毕,自动关闭文件

连接Mysql和ssh的时候使用 

示例一:

#with 打开文件的方式 --》推荐使用
#with语句执行完毕,自动关闭文件
#连接Mysql和ssh的时候使用
try:
    with open("test.txt", "r", encoding="utf-8") as fp:
        content4 = fp.readlines()
        print(content4)
except FileExistsError as ex:
    print("文件不存在",ex)
except Exception as ex:
    print("出现异常", ex)

示例二: 

import time
try:
    with open("./test1.txt", "r+", encoding="utf-8") as fp:
        # 数据写到当前文件指针的位置
        # 2=>文件末尾,0 => 移动0字节
        fp.seek(0,2)
        # fp.write的时候,数据并不会立刻写入(磁盘是慢设备,先把数据写到缓冲区)
        # 1.文件关闭 2.缓冲区满 3.代码结束
        fp.write("hello !")
        time.sleep(10)
except FileNotFoundError as ex:
    print("文件不存在 ")
except Exception as ex:
    print("未知错误")

练习一: 从键盘接收10行数据,以行为单位写入到文件test2.txt中

# 从键盘接收10行数据,以行为单位写入到文件。test2.txt
# 如果第2次执行,内容是追加到后面
# 能封装函数(类型注解),异常处理(可能会出错)
# def write_file(a:str) -> None:

# 练习:
# 从键盘接收10行数据,以行为单位写入到文件。test2.txt
# 如果第2次执行,内容是追加到后面
# 能封装函数(类型注解),异常处理(可能会出错)
# def write_file(a:str) -> None:

def write_file(filename:str) -> None:
    #异常处理
    try:
        # 打开文件 a是追加的意思
        with open(filename,"a",encoding="utf-8") as fp:
            for i in range(10):
                #输入每一行的数据
                line = input(f"请输入第{i+1}行数据:")
                #写入数据
                fp.write(line + "\n")
    except FileExistsError as ex:
        print("文件不存在", ex)
    except Exception as ex:
        print("出现异常", ex)

write_file("test1.txt")

练习二:通过ip请求淘宝的一个接口获取到省份和运营商

- 通过ip请求淘宝的一个接口获取到省份和运营商
- 接口:https://ip.taobao.com/outGetIpInfo?accessKey=alibaba-inc&ip=要查询的ip地址
- 每一行变成这种形式保存到文件
- 格式:ip,中国,湖南,电信

import requests
from ipaddress import IPv4Address

"""
- 通过ip请求淘宝的一个接口获取到省份和运营商
- 接口:https://ip.taobao.com/outGetIpInfo?accessKey=alibaba-inc&ip=要查询的ip地址
- 每一行变成这种形式保存到文件
- 格式:ip,中国,湖南,电信
"""

#拉取接口数据
def get_ip_info(ip):
    url = f"https://ip.taobao.com/outGetIpInfo?accessKey=alibaba-inc&ip={ip}"
    response = requests.get(url)
    # 用于将 HTTP 响应的内容解析为 JSON 格式。
    data = response.json()
    if data["code"] == 0:
        ip_info = data["data"]
        ip = ip_info["ip"]
        country = ip_info["country"]
        region = ip_info["region"]
        isp = ip_info["isp"]
        write_file(ip,country,region,isp)
    else:
        return "Request Error"

#将数据保存到文件
def write_file(ip,country,region,isp):
    try:
        with open("test.txt", "a", encoding="utf-8") as fp:
            fp.write("ip:" + ip + ",country:" + country + ",region:" + region + ",isp:" + isp + "\n")
    except FileExistsError as ex:
        print("文件不存在", ex)
    except Exception as ex:
        print("出现异常", ex)

def main():
    # 主函数的代码逻辑
    # 方法二:直接调用IPv4地址
    network  = IPv4Address('192.168.0.1')
    print(network )

    #方法一:调用多条IP地址
    ip_list = ["192.168.2.150", "192.168.2.43", "192.169.2.210"]
    for ip in ip_list:
        #运行get_ip_info
        get_ip_info(ip)

if __name__ == "__main__":
    main()

 

go 异常处理 

Go 推崇“错误即正常”的理念,通过返回错误值来表示函数调用是否成功,并使用一些约定的方式对错误进行处理。

Go 语言的异常处理模式主要涉及以下几个关键点:

  1. 错误类型:在 Go 中,错误类型是一个实现了 error 接口的对象。通常,函数在遇到错误时会返回一个错误对象作为结果。如果函数执行成功,错误对象为 nil;否则,错误对象将包含有关错误的相关信息。

  2. 错误返回:Go 函数可以通过多个返回值来返回错误。一般约定将错误作为最后一个返回值。

  3. 错误检查:在调用返回错误的函数后,需要检查错误是否为 nil,以确定函数调用是否成功。通常使用 if err != nil 进行判断,如果错误不为 nil,则说明发生了错误。

  4. 错误处理:一旦发现错误,可以根据具体情况选择适当的处理方式。处理方式可以是记录日志、终止程序、返回默认值或者尝试其他恢复措施等。

go中,如果遇到执行结果出错的情况下,通常是通过返回值的方式告诉你。

GO中的两种异常:Error、Panic

// error (错误)=> 返不是很严重的错误,返回程序员处理

// panic (恐慌)=> 如果是非常严重的错误 => 退出 (异常处理)

error示例一:

func main()  {
	map3 := map[string]string{
		"age":"10",
		"name":"clay"}
	value, flag := map3["age3"]
	fmt.Printf("Value值为:%s, err为:%v\n", value, flag)

其中返回值为:

Value值为:, err为:false

#err为false 不为nil,表示程序出现error了

使用 if err != nil 进行判断(error类型),然后对异常进行处理

func main()  {
	//打开文件
	file, err := os.Open("test.txt")
	// nil --> 某些数据类型的零值
	// nil 是 error的零值 --》:表示没有出现错误
	//异常处理
	if err != nil{
		fmt.Printf("出错了:%v\n", err)
	}
	fmt.Printf("文件内容:%v\n", file)

}

输出:

出错了:open test.txt: The system cannot find the file specified.  
文件内容:<nil>

error示例二:

func main()  {

   	result := hello("")
	fmt.Printf("出错了:%T  %v\n", result, result)
	result =hello("cici")
	fmt.Println(result)
}

func hello(name string) error {
    //error异常如果出现
	if len(name) == 0{
		//go  --> return ValueError("name为空")
		return errors.New("name为空")
	}
	fmt.Printf("hello:%s ", name)
	return nil
}

输出:

出错了:*errors.errorString  name为空
hello:cici <nil>

如果是非常严重的错误,Panic(恐慌)

defer进行异常处理

defer => 延迟执行 => 放要有可能出错有代码之前

derfer 后接带有recover处理的函数
//recover => 获取Panic信息

Panic示例:

func main()  {
	sil := []int{1,2,3,4,5,6}
	fmt.Println(get(sil,7))
}

func get(sil []int, index int ) int  {
    // defer进行异常处理
     recover()函数内使用
	//defer func(){
	//	//recover()捕获我们的异常信息
	//	if r:=recover();r!=nil{
	//		fmt.Println("Something error")
	//	}
	//}()
	defer myrecover()
	//传一个切片过来,它帮你返回index(索引)
	//defer 延迟执行 等函数内容执行完成后,再去执行defer,倒序执行
	fmt.Println("start....")
	defer fmt.Println("第一个defer")
	defer fmt.Println("第二个defer")
	fmt.Println("end....")
	//defer要放到可能出错的代码之前
	defer fmt.Println("第三个defer")
	return sil[index]     //可能出错的代码

}

// recover()函数外使用
func myrecover()  {
	if r:=recover();r!=nil{
		fmt.Println("Something error")
	}
}

输出:

start....
end....
第三个defer
第二个defer
第一个defer
Something error
0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/742780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PFC离散元仿真,3DEC非连续岩石力学与结构问题分析

一、背景&#xff1a; 随着我国经济的发展&#xff0c;岩土工程涉及的要求从材料、理论到施工工艺都提出了全方位的系统升级。在岩土工程分析设计中&#xff0c;3DEC和PFC软件快速建模也一直是岩土工作者所关注的问题。3DEC是非连续岩石力学与结构问题的首选分析程序&#xff0…

C语言图书管理系统

一&#xff0c;开发环境 操作系统&#xff1a;windows10, windows11, linux, mac等。开发工具&#xff1a;Qt, vscode, visual studio等开发语言&#xff1a;c 二&#xff0c;功能需求 1. 图书信息管理&#xff1a; 这个功能的主要任务是保存和管理图书的所有信息。这应该包…

C++数据结构X篇_09_C++实现栈的顺序存储与链式存储

本篇参考C实现队列的顺序存储与链式存储整理&#xff0c;先搞懂结构框架&#xff0c;后期根据视频利用c对内容实现&#xff0c;也可以对c有更高的提升。 文章目录 1. 顺序存储2. 链式存储 队列是一种特殊的数据存储结构&#xff0c;与栈不同的是其数据存储与访问顺序为先进先出…

Python教程:全局变量和局部变量

变量的作用域始终是Python学习中一个必须理解掌握的环节&#xff0c;下面我们从局部变量和全局变量开始全面解析Python中变量的作用域。 所谓局部变量&#xff0c;指的是定义在函数内的变量。定义在函数内的变量&#xff0c;只能在函数内使用&#xff0c;它与函数外具有相同名…

GlasgowSmile-v2靶机复盘

GlasgowSmile-v2靶机复盘 这是一个非常难的靶机 这个靶机是直接给我们ip地址的&#xff0c;所以就不用去找ip地址了&#xff0c;直接对ip进行一个扫描。 发现开通了22&#xff0c;80&#xff0c;83&#xff0c;但是8080端口是个开启我们无法访问的状态&#xff0c;所以可以猜…

【Redis】—— Redis的RDB持久化机制

&#x1f4a7; 【 R e d i s 】—— R e d i s 的 R D B 持久化机制 \color{#FF1493}{【Redis】 —— Redis的RDB持久化机制} 【Redis】——Redis的RDB持久化机制&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞…

Springboot -- Mybatis + Mybatis Generate + KingbaseES8(pgsql) + 静态多数据源

&#x1f3db;&#x1f3db;&#x1f3db; 以下内容记录一次 Springboot 项目整和人大金仓数据库的过程 &#x1f3db;&#x1f3db;&#x1f3db; 文章目录 KingBaseES8SpringBoot整合KES8(pgsql)修改pom文件配置多数据源配置文件配置类 代码生成器配置JsonTypeHandler修改配…

[HDCTF2019]Maze(初识逆向)

下载附件解压&#xff0c;为了方便&#xff0c;我将文件名改为了maze.exe 一般我们先查壳&#xff0c;确实存在UPX壳 对于刚接触逆向的我&#xff0c;一键脱掉哈哈哈 不过还是要说一下&#xff0c;这种脱壳处理有可能会产生其它损坏或者影响&#xff0c;需要进行一定的修复 可…

Visio使用

1.Visio中字母上下标快捷键&#xff1a; 选中要成为上标的文字,ctrlshift"" 选中要成为下标的文字,ctrl"" 2.导入CAD文件 从 AutoCAD 版本 2007 到 2017 导入 .dwg 或 .dxf 文件。 3.编辑CAD文件 右键图形—CAD绘图对象—转换 选择高级 将默认选项改…

居安思危,测试员被裁了还能干什么?

2019年迎来了一大波大佬级公司裁员&#xff0c;包括了阿里、美团、知乎……。它们是各行业的独角兽公司&#xff0c;既是媒体关注的焦点&#xff0c;也是代表了行业风向的指针。 2019年的互联网&#xff0c;已经过了蓬勃发展期&#xff0c;接下来要迎接的更加平稳、规律的发展…

ECM能耗管理云平台

能源是企业运营中不可或缺的要素之一&#xff0c;直接影响企业的成本和竞争力。能源消耗和碳排放不断增长&#xff0c;对环境和可持续发展造成了严重影响。越来越多的企业开始关注并实施能耗管理云平台系统&#xff0c;以实现更高的能源效率、降低碳排放。 ECM能耗管理云平台系…

数分面试题:魔方涂色

问题&#xff1a;现在有一个正方体&#xff0c;现在有6种颜色&#xff0c;给正方体的每一面涂一种颜色&#xff0c;有多少种涂色方法。 注意&#xff01;正方体是可以旋转的&#xff0c;如果旋转正方体之后&#xff0c;涂色效果和另一种涂色效果相同&#xff0c;那么算是一种涂…

车载开发月薪10k与30k的区别,就是CAN总线技术

CAN&#xff08;Controller Area Network&#xff09;总线是一种实时通信协议&#xff0c;是一种广泛应用于车载电子系统中的网络技术。CAN总线技术最初是由德国Bosch公司开发的&#xff0c;用于汽车电子控制系统&#xff08;ECU&#xff09;之间的通信&#xff0c;它能够在车辆…

Linux的shell脚本

Linux的shell脚本 &#x1f607;博主简介&#xff1a;我是一名正在攻读研究生学位的人工智能专业学生&#xff0c;我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑&#xff0c;欢迎随时来交流哦&#xff01;&#x1f604; ✨座右铭&…

Ai数字人浪潮来袭,超写实数字人系统出世,为企业打造定制化服务

数字人概念首次出现在80年代&#xff0c;最初在音乐领域应用&#xff0c;使用手绘技术进行生成。随着时间的推移&#xff0c;传统手绘被CG和动作捕捉等技术取代&#xff0c;从而使虚拟数字人的制作变得更加简化并降低成本。因此&#xff0c;虚拟数字人产业进入产业化探索阶段。…

SpringBoot快速实践 --Ⅰ

文章目录 启动一个SpringBoot项目如何替换内嵌容器玩转SpringBoot配置全局异常处理过滤器拦截器使用Lombok简洁代码使用IDEA HTTP Client进行接口调试 启动一个SpringBoot项目 如果你觉得使用官网来创建太慢了&#xff0c;那你直接把以前项目的依赖粘过来就行了&#xff1a; …

pytorch LBFGS

LBFGS pytorch的LBFGS也是一个优化器 但是与一般的优化器不同 平常我们的顺序是 losscriterion(predict, gt) optim.zero_grad() loss.backward() optim.step()而LBFGS是 def closure():optim.zero_grad()loss criterion(predict, gt)loss.backward()return lossoptim.step…

5.EFLK(ELK+filebeat)+filter过滤

文章目录 EFLK&#xff08;ELKfilebeat&#xff09;部署filebeat修改配置文件logstash配置 logstash的filter过滤grok(正则捕获插件)内置正则表达式调用自定义表达式 mutate(数据修改插件)重命名字段添加字段删除字段转换数据类型替换字段内容以"|"为分割符拆分数据成…

系统升级丨让VR全景制作简单再简单

最高端的VR全景 往往只需要最朴素的制作方式 酷雷曼3D VR数字化升级平台4.0版本 闪耀上线 全新的后台界面 丝滑的编辑工具 无需代码 不用建模 简单拖拉拽移 依然有手就行 轻松搭建VR元宇宙空间 1、界面升级&#xff0c;让VR创作更加可视 全新视觉设计 酷雷曼3D VR…

【必读】未来八大最具潜力行业!看懂就赚了

1 网络安全行业 现在保护“网络安全”已经成为世界各国的重要共识。有专家表示&#xff0c;未来网络安全行业有望超越金融、地产业成最赚钱行业。 2 动漫行业 我国的动漫产业才刚刚起步&#xff0c;现在全国各地如北京、上海、杭州、大连、深圳、广州等城市均建立起动漫产业…