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 带上调用链信息,便于定位问题

先写这么多吧,语言等技术只是实现方式,最后还是得看我们需要解决的问题。

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

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

相关文章

access中如何画斜线_设计斜线表头

。1.4.16 在表格顶端加空行要在表格顶端加一个非表格的空白行,可以使用“CtrlShiftEnter”组合键通过拆分表格来完成。但当你的表格位于文档的最顶端时,有一个更为简捷的方法,就是先把插入点移到表格的第一行的第一个单元格的最前面&#xff…

Linux安装Flash脚本,Linux(CentOS)下的Shockwave Flash shell一键更新脚本

原创内容,转载请注明出处: https://www.myzhenai.com.cn/post/2318.html https://www.myzhenai.com/thread-17933-1-1.html关键字: Shockwave Flash一键更新脚本 Flash一键更新脚本这个脚本其实是我自己用的, 我的系统里安装了FlashPlayer软件和火狐(firefox)浏览器里安装了Sho…

收文处理和发文处理的环节_集气罩的设计是气体净化、废气处理系统设计的重要环节...

在工业生产中,常用于控制各种颗粒物和气态污染物的方法是将有害物质在发生源收集起来,经过净化设备净化后排到大气中,这就是局部排气净化系统,这种系统所需要的风量最小,效果好,能耗也少,是生产…

linux磁盘管理不用LVM,[linux] LVM磁盘管理(针对xfs和ext4不同文件系统)

简单来说就是:PV:是物理的磁盘分区VG:LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解为一个仓库或者是几个大的硬盘LV:也就是从VG中划分的逻辑分区如下图所示PV、VG、LV三者关系&…

cad监控图标_干货!多种不同环境的无线视频监控系统拓扑图

有人问,既然无线视频监控系统如此普及,是不是所有地方都能用到无线视频监控设备呢?例如在大街上、学校里,工厂中、写字楼内,建筑工地上、公园中、住宅小区里、江河岸边、港口码头、甚至是森林、戈壁滩等等。只要有需要…

linux qt手册,明远智睿I.MX6 Linux-4.1.15 QT5 程序编译手册

明远智睿I.MX6 Linux-4.1.15 QT5 程序编译手册[复制链接]编译主机环境编译主机CPU架构:64位编译主机系统:LinuxLinux发行版:UbuntuUbuntu版本号:14.04.5Ubuntu版本类型:桌面版Ubuntu系统类型:x86-64安装 SD…

axios 获取上传进度_PHP获取HTTP body内容的方法总结

有时候我们获取数据时需要根据Header中的格式来解析,比如上传一个json而不是一个文本。这里用到了 php输入|输出流 的概念。PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时…

python编程快速上手 让繁琐工作自动化 豆瓣_2019年,这些豆瓣评分9.0以上的8本程序员好书你都知道吗?...

豆瓣这些9.0以上的高评分程序员好书你都知道有哪些吗?小编去豆瓣看了一下,推荐这8本最适用的程序员好书给你。 1、UNIX环境高级编程(第3版)(豆瓣评分9.6)UNIX编程圣经 与…

hadoop集群swap_hadoop集群调优-OS和文件系统部分

OS and File System根据Dell(因为我们的硬件采用dell的方案)关于hadoop调优的相关说明,改变几个Linux的默认设置,Hadoop的性能能够增长大概15%。open file descriptors and files文件描述符是一个索引值,指向内核为每一个进程所维护的该进程打…

python搭建selenium_自动化测试之路3-selenium3+python3环境搭建

1、首先安装火狐浏览器 有单独文章分享怎么安装 2、搭建python环境 安装python,安装的时候把path选好,就不用自己在配置,安装方法有单独文档分享 安装好以后cmd打开输入python查看是否配置好 3、安装pip 一般python会默认带一个,放…

linux perl的while循环中ctrl+c失效,perl循环控制

if格式(类似于awk):if(表达式){ #空格可以忽略语句 ;} #elsif注意多了个s,elsif和else可以省略elsif(表达式){ #语句块的{}必须有,可以为空语句:}else{语句&#xff1…

keras实现简单lstm_深度学习(LSTM)在交通建模中的应用

上方点击蓝字关注?在简单了解了LSTM原理之后,本期我将以航班延误预测为例为大家介绍一下如何利用Python编程来构建LSTM模型。这里我们要用到一个高级的深度学习链接库——Keras,它以TensorFlow或者Theano作为后端引擎,只处理模型的建立、训练和预测等功…

井下关于风速的规定_矿井有害气体最高允许浓度、温度、风速的规定

≥0.5%CH4≥0.5%CH4<0.5%CH4被串掘进巷道内全部非本质安全型电气设备回风流中机电设备硐室的进风侧≥0.5%CH4≥0.5%CH4<0.5%CH4机电设备硐室内全部非本质安全型电气设备关于温度的规定《煤矿安全规程》规定,生产矿井采煤工作面的空气温度不得…

linux 大数字 进制转换,Linux下用bc快速进行数字进制转换

介绍如何在Linux下用bc命令进行快速的数字进制转换。我想Windows里,数字进制转换最方便的就是自带的calc计算器,但是它原没有我们可爱的Linux方便。Linux下,我们在term里敲 几下键盘就可以做数字进制转换了。当然,你如果自己转换更…

python替换nan_python – 用NaN替换字典的空值

我有一个缺少值的字典(密钥在那里,但相关的值是空的).例如,我想要下面的字典:dct {ID:, gender:male, age:20, weight:, height:5.7}要改为这种形式:dct {ID:NaN, gender:male, age:20, weight:NaN, height:5.7}我怎样才能以最省时的方式写出来呢&…

commons-pool2-2.3 jar包_[漏洞复现]FastJson 1.2.61远程代码执行漏洞(From第三方jar包)

前言最近FastJson更新了黑名单,升级到了1.2.61版本,我尝试bypass其黑名单,在AutType打开的情况下成功绕过了黑名单防护.(目前暂未修复,官方即将更新)复现环境准备1.JDK 8U202.所需jar清单如下fastjson-1.2.61.jarcommons-configuration2-2.0.jarcommons-lang3-3.3.2.jarcommons…

linux安装dev命令,Linux安装与基础命令

首先准备一个liunx镜像和一台安装好虚拟机的电脑。配置好虚拟机,选在稍后安装。选择镜像文件,开启虚拟机进行安装。配置yum源。首先插入光盘。由于是虚拟机,用的光盘镜像,在/mnt/下面创建一个文件夹yum 。 复制所有光盘里的内…

python爬取京东评论_Python如何爬取京东的评价信息

Python如何爬取京东的评价信息 模块:requests,BeautifulSoup import re import time import csv import requests from bs4 import BeautifulSoup def write_a_row_in_csv(data, csv_doc): "save good information into a row in csv document"…

王思聪吃热狗的c语言小程序,王思聪吃热狗火了,开发各种恶搞小程序!王校长:我不要面子的啊...

原标题:王思聪吃热狗火了,开发各种恶搞小程序!王校长:我不要面子的啊近日王校长上了不少次热搜,其中有一条就是王校长吃热狗火了,接下来就出现了各种各样的表情包,手机壳,素描等等。…

python有什么内容_python能做什么

python能做什么?书声琅琅Python培训老师介绍,最近许多的朋友咨询,听说python很火,甚至可以超越JAVA,因此很想学这个python,但是不知道python能做什么,能完成一些什么项目呢?针对这个问题,今天…