V2EX 前天 13:58
[Python] go 转 Python 的心智负担增加
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

文章对比了Go和Python在函数调用和异常处理方面的差异,探讨了开发者在编写健壮代码时所面临的心智负担。Go语言通过返回值中的err来明确表示错误,使得错误处理流程清晰。而Python则依赖于try/except语句块来捕获异常,但由于Python函数可能抛出多种异常,开发者需要仔细考虑并处理,增加了代码的复杂度和维护难度。文章通过具体的代码案例,展示了两种语言在处理文件打开和JSON解析等操作时的不同方式,突出了Python在异常处理方面可能带来的挑战。

🤔 Go语言通过返回值中的err来处理错误,例如文件打开或JSON解析失败时,函数会返回一个非空的err。这种方式使得错误处理流程清晰,开发者可以很容易地判断函数是否执行成功,并进行相应的处理。

💡 Python使用try/except语句块来捕获异常,这种方式使得Python在处理异常时更加灵活,可以捕获多种类型的异常。然而,这也增加了代码的复杂性,开发者需要仔细考虑每个函数可能抛出的异常类型,并进行相应的处理。

🧐 Python中,开发者需要考虑函数可能抛出的多种异常,这增加了心智负担。文章中提到,开发者需要为每个外部函数调用都加上try/except语句块,以确保程序的健壮性。这使得代码变得冗长,可读性降低,也增加了维护的难度。

🤔 文章通过对比Go和Python的代码示例,展示了两种语言在处理文件打开和JSON解析等操作时的不同方式。Go语言的错误处理方式更加简洁,而Python的异常处理方式则更加灵活,但同时也带来了更高的心智负担。

之前写 go ,go 调用函数的时候,有问题就是通过 返回值 有没有 err 来判断。心智负担很小,直接撸就行。

一个简单的案例,打开文件,然后 json 解析。go 版本是

func TestA(t *testing.T) {  fd, err := os.OpenFile("a.txt", os.O_RDWR, 0666)    if err != nil {     fmt.Println("打开文件失败", err)  }   defer fd.Close()    var data map[string]string  err = json.NewDecoder(fd).Decode(&data) if err != nil {     fmt.Println("解析文件失败", err)  }   fmt.Println(data)}

但是到 python 这边

f = open("a.json")data = json.load(f)f.close()

但是吧

    如果文件不存在需要处理文件存在,open() 执行异常了要处理json.load() 会不会异常?我跳转源码看 josn.load()源码也没看到他会返回哪些异常信息。

所以我写出这种代码

try: with open("a.json", "r") as f:      data = json.load(f)except Exception as e:   print(e)

但是这样把多种异常合到一个 Exception 了,如果出现异常,你不知道是哪个函数调用出现的异常。所以就需要这样。

try:   with open("a.json", "r") as f:      try:            data = json.load(f)     except Exception as e:          print(e)        except Exception as e:  print(e)

然后我发现,最大的问题就是,我每次调用一个外部函数的时候,TMD 根本不知道这个函数会不会异常,总不能每个函数调用都用 try/except 处理一下?

try: f1()except Exception as e:  print(e)    try:    f2()except Exception as e:  print(e)    try:    f3()except Exception as e:  print(e)

写 python 给我的感受就是,想写好一个健壮的程序,有很大的心智负担,我总是要考虑我调用的函数会不会有异常。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Go Python 异常处理 错误处理 心智负担
相关文章