之前写 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()
但是吧
所以我写出这种代码
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 给我的感受就是,想写好一个健壮的程序,有很大的心智负担,我总是要考虑我调用的函数会不会有异常。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.