python函数式编程读取数据时出现错误_Python编程中,函数遇到问题是抛出错误好还是约定返回值好?...
这其实是一个编码规范的问题,没有任何场景都适用的解决方案,就好比有了 list,但是还是需要 tuple,所以对于抛出异常好,还是返回值好,是需要具体情况看的。
在 C 语言中,通用的做法是函数返回一个 code 描述状态,例如 main 函数,一般返回 0 就是正常,其他数值就需要去查错误码。这种方式仍广泛使用于 HTTP API 等接口。而到了面向对象编程语言,异常也是一个类的实例,用于表达特定的意思,这样异常有了更丰富的表现方式,处理方式也显得更优雅。
但是异常的捕获就是万能的了吗?
并不是,现实情况是,不少人仍是“错误”的处理异常。例如从头到尾的一个 try except,并且捕获所有异常,这就是为了处理异常而处理异常,反而增加了代码量。
异常捕获其实也是需要讲究技术的,就好比会写代码,不一定会写出优雅的代码、高效的代码;会捕获异常,不一定会“优雅”地捕获异常。
对于开发团队的管理者来说,一些编码“规范”(例如何时改抛出异常,怎么捕获等)也是越早立下越好,对于后期项目的维护和转移是非常有利的。
对于开发者来说,一些编码“规范”的培养,不但是个人编码“素养”的提高,也是技术视野的提升。一段时间后反观自己过去的代码,一定会觉得怎么写的这么“丑陋”。
下面我也简单讲一下什么场景下该怎么“使用”异常。
如下情况应该尽量使用异常处理:执行的错误情况非常多样化,单一的返回值无法表示多种情况
执行的错误需要调用方区别对待
方法的调用层次比较深,抛出异常能使代码更简洁且易读
用于链式调用的方法,例如生成器模式中,避免调用方多余的判断
如下情况应该尽量避免使用异常处理:不要用异常做条件判断,条件判断语句的性能一般更好
方法返回值简单,且用于条件判断的,例如 if 语句中的子串查找都用 find 而不是 index
下面是异常处理的一些规范分享:不要在最外层调用整段 try except,这非常不负责任,而且也不好 debug
一般捕获的都是 Exception 异常的子类,一般情况下不用捕获底层异常
系统一般都推荐定义自己的异常类(甚至是异常类树),即使内容是空的(最好有文档和__str__),便于区分
尽量捕获明确的子类异常,用多 catch 捕获,最后可以捕获 Exception,不要上来就直接捕获 Exception,区分异常的类型能更好的帮助我们区别处理
不要为了不抛出异常而去捕获并抛弃,如果不能处理,就抛给上层调用者
要善于使用 finally 和 else,特别是数据库事务,连接等需要主动关闭或回滚的情况
不需要每次捕获都打印日志,规划好日志级别,不然日志会难以阅读
捕获严重异常后打印日志最好用 traceback 带上调用链信息,便于定位问题
先写这么多吧,语言等技术只是实现方式,最后还是得看我们需要解决的问题。
python函数式编程读取数据时出现错误_Python编程中,函数遇到问题是抛出错误好还是约定返回值好?...相关推荐
- python函数式编程读取数据时出现错误_写 Python 代码不可不知的函数式编程技术...
原标题:写 Python 代码不可不知的函数式编程技术 选自 Medium 作者:Raivat Shah 参与:魔王.Jamin 本文对 Python 中的函数式编程技术进行了简单的入门介绍. 近来, ...
- python存储和读取数据时出现错误_python读取json文件存sql及codecs读取大文件问题...
preface: 最近帮师兄处理json文件,需要读到数据库里面,以备其后续从数据库读取数据.数据是关于yelp网站里面的: https://github.com/Yelp/dataset-examp ...
- python从csv读取数据到网页输入框_python中怎么把csv文件读取的数据显示在网页上...
python的标准库csv库主要是面向本地文件,就是说你的CSV文件得存储在你的电脑上.当进行网络数据采集的时候,很多文件都是在线的.不过有一些办法可以解决这个问题: 1,手动把CSV文件下载到本机, ...
- javascript如何手动抛出错误?
前言 在javascript中通常使用throw语句抛出错误,throw语句用于抛出一个用户自定义的错误. 例如:抛出了一个值为字符串的错误 throw 'abc'; 例如:抛出了一个错误对象 thr ...
- koa --- 使用中间件多层级抛出错误
说明 能够熟练的掌握错误的抛出,可以在一定程度上提高代码的开发效率和可读性 构造错误 本栗采用调用一个不存在的函数来抛出错误 const Koa = require('koa'); const app ...
- python函数式编程读取数据-python学习笔记9:函数式编程
函数式编程(FunctionalProgramming) 基于lambda演算的一种编程方式 程序中只有函数 函数可以作为参数,同样可以作为返回值 纯函数式编程语言: LISP, Haskell Py ...
- android获取错误原因,从http读取数据时发生OutOfMemory错误获取请求android
我正在做一个http获取请求.我需要接收大量数据,但在读取数据时出现OutOfMemory异常.从http读取数据时发生OutOfMemory错误获取请求android 我的代码: public st ...
- Scattering:将数据写入到buffer时,可以采用buffer数组,依次写入 [分散] || Gathering: 从buffer读取数据时,可以采用buffer数组,依次读
package com.atguigu.nio;import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.n ...
- 解决 pandas 读取数据时内存过大的问题
解决 pandas 读取数据时内存过大的问题 背景: 在我们使用pandas进行数据处理的时候,有时候发现文件在本地明明不大,但是用pandas以DataFrame形式加载内存中的时候会占用非常高的内 ...
最新文章
- 动手扩充FreeTextBox的功能
- 第一篇博客,java学生管理系统(挑战全网最全)
- 如何做一个听话的 “输入框”
- 学python心得体会1000字-学习python cgi的一点心得体会
- 为什么“或命题真假的判断是有真则真?
- 常用系统存储过程有:
- 计算机网络可以按哪些原则分类,计算机网络的分类
- 添加错误debug信息
- php swoole hyperf,【php】Hyperf为什么要关闭Swoole协程短名称
- android cpu 压力测试,两个古董级压力测试工具 leakyapp.exe 和 cpustre.exe
- 中国连接系统市场趋势报告、技术动态创新及市场预测
- python做单因素方差分析
- 虚拟机中安装windows XP系统
- 利用动态数组生成魔方矩阵
- 怎么让代码的逻辑更清晰?
- .so文件移动游戏破解范例
- matlab背景色为白色
- 微信小程序模板template的使用
- 项目十大管理(四)成本管理
- win10取消默认文件打开方式
热门文章
- Cisco 3560 Qos限速配置
- SQL Server 开发指南(经典教程)
- 桌面虚拟化之用户行为审计
- [赵星理]《简单男人》--歌曲温暖你的心,激励你前进
- jquery级试题_JS-jQuery练习题面试题
- zookeeper数据结构及Znode类型
- super go_Go 简单性的价值:来自对 Go 倍加青睐的谷歌软件工程师的自述
- 汉子编码比字母编码长_字母/博客作者编码问题(使用动态编程)
- python 打印列表元素_Python程序以不同方式打印列表元素
- kailinux mysql提权_linux下mysql提权