当前位置: 首页 > 编程日记 > 正文

(十九)异常处理

什么是异常处理

异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下

image

  • 语法错误: 这种错误根本就过不了python解释器的语法检测,必须在程序执行前就改正
  • 逻辑错误:
#TypeError:int类型不可迭代
for i in 3:pass
#ValueError
num=input(">>: ") #输入hello
int(num)#NameError
aaa#IndexError
l=['egon','aa']
l[3]#KeyError
dic={'name':'bruce'}
dic['age']#AttributeError
class Foo:pass
Foo.x#ZeroDivisionError:无法完成计算
res1=1/0
res2=1+'str'

异常的种类

AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它

更多的异常

ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError

异常处理

为了保证程序的健壮性与容错性,即在遇到错误时程序不会崩溃,我们需要对异常进行处理,
如果错误发生的条件是可预知的,我们需要用if进行处理:在错误发生之前进行预防

如果错误发生的条件是不可预知的,则需要用到try...except:在错误发生之后进行处理
例如

try:f=open('a.log',mode='r',encoding='utf-8')g=(line.strip() for line in f)print(next(g))print(next(g))print(next(g))print(next(g))print(next(g))
except StopIteration:f.close()

异常分类

异常类智能用来出来指定的异常情况,如果非指定异常则无法处理。

s1='hello'
try:int(s1)
except IndexError as ea:   #将异常的值 赋予一个变量ea,并将该变量打印出来。print(ea)>>>
ValueError: invalid literal for int() with base 10: 'hello'

多分支,结构和if...else...类似

s1='hello'
try:int(s1)
except IndexError as ea:print(ea)
except StopIteration as e:print(e)
except ValueError as b:print(b)或者s2='world'
try:int(s2)
except (IndexError,ImportError,ValueError) as e:print(e)

什么时候用异常处理

是不是任何程序都加上异常处理就好了呢?当然不是

首先try...except是你附加给你的程序的一种异常处理的逻辑,与你的主要的工作是没有关系的,这种东西加的多了,会导致你的代码可读性变差

然后异常处理本就不是逻辑的擦屁股纸,只有在错误发生的条件无法预知的情况下,才应该加上try...except

转载于:https://www.cnblogs.com/morron/p/9200616.html

相关文章:

jquery 获取一组元素的选中项 - 函数、jquery获取复选框值、jquery获取单选按钮值...

做表单提交时,如果现在还在用form提交,用户体验很差,所以一般使用ajax提交。 其中需要获取每个表单输入元素的值,获取的时候像文本框这些还好说,Jquery提供了 .val() 方法,获取很方便,但是获取复…

geany怎么创建文件夹_教程详情|Geany怎么使用,Geany安装使用教程_234游戏网

Geany是利用GTK 2工具包开发的一个快速、轻巧的集成开发环境,具有良好的可移植性和通用性、安全性,广泛应用于各个行业。Geany具有语法高亮、代码折叠、代码自动完成等功能,非常适合开发人员使用。下面是关于Geany安装使用教程,希…

Django模板系统和admin模块

只需要记两种特殊符号:{{ }}和 {% %}变量相关的用 {{}}, 逻辑相关的用 {%%}。 Filters 语法: {{ value|filter_name:参数 }}default{{ value|default: "nothing"}} 如果value值没传的话就显示nothinglength{{ value|length }}|左右…

finalshell文件列表不显示_Jira面板配置_待办事项不显示问题列表

最近,使用jira进行项目管理,出现一些问题,对于其中一些配置,做下记录,后续方便查看,也给需要的人一个参考,传送门:jira使用文档_Java_pang787559613的博客-CSDN博客​blog.csdn.netj…

背单词:3年,34150分钟!

转载于:https://www.cnblogs.com/sx00xs/p/6128618.html

如何学习区块链技术

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 有效地学习区块链技术,您需要深入了解区块链协议和一些编程语言。记住区块链是一种可以用各种编程语言实现的协议。看下面的例子&#…

.net里鼠标选中的text数据怎么获取_Python数据科学实践 | 爬虫1

点击上方蓝色字体,关注我们大家好,基于Python的数据科学实践课程又到来了,大家尽情学习吧。本期内容主要由智亿同学与政委联合推出。前面几章大家学习了如何利用Python处理与清洗数据,如何探索性数据分析,以及如何利用…

redis实现对账(集合比较)功能

现状:每日在进行系统之间的订单对账时,往往是这样的操作流程; 1.从外部系统拉取数据存入本地数据库; 2.查询本地订单数据集合localSet; 3.查询外部系统订单数据集合outerSet; 4.以本地localSet为基准,对照o…

Javascript刷题 》 查找数组元素位置

找出元素 item 在给定数组 arr 中的位置 输出描述: function indexOf(arr, item) {..... } 如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1 输入例子: indexOf([ 1, 2, 3, 4 ], 3) 输出例子: 2 实现方法 1、先将arr转换成字符串,…

Go 语言函数

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 函数是基本的代码块,用于执行一个任务。 Go 语言最少有个 main() 函数。 你可以通过函数来划分不同功能,逻辑上每个函数执…

终端主题_再见 XShell 和 ITerm 2,是时候拥抱全平台高颜值终端工具 Hyper 了!

点击上方“涛哥聊Python”,选择“星标”公众号重磅干货,第一时间送达转自:运维之美不论是 macOS 还是 Windows 下,我们都不推荐使用系统自带终端。无论是可拓展性还是可编程性都被「系统自带」这样的特点限制。特别是 Windows 下的…

每天一个linux命令(8):cp 命令

cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数。但是如果是在shell脚本…

samba srver on centos-7

切换到root用户安装samba,将windows登录用户admin映射到linux用户centos 安装samba并准备工作目录 yum install -y samba samba-client mkdir -p /var/samba/code chown -R centos:centos /var/samba/codetouch /etc/samba/smbusersecho "centos admin "…

以太坊数据结构MPT

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 MPT(Merkle Patricia Tries)是以太坊存储数据的核心数据结构,它是由Merkle Tree和Patricia Tree结合的一种树形结构,理解MP…

lambda在python中的用法_在python中对lambda使用.assign()方法

我在Python中运行以下代码:#Declaring these now for later use in the plotsTOP_CAP_TITLE Top 10 market capitalizationTOP_CAP_YLABEL % of total cap# Selecting the first 10 rows and setting the indexcap10 cap.loc[:10, :].set_index(id)# Calculating…

react 开发过程中的总结/归纳

1、点击元素,获取绑定该事件的父级元素,使用 e.currentTarget。e.target 获取的是,出发该事件的元素,该元素有可能是所绑定事件的元素的子元素。 2、使用 react router4 history 只能传递给儿子组件,不能传递给孙子组件…

kvm虚拟机--存储池配置梳理(转)

1.创建基于文件夹的存储池(目录) 2.定义存储池与其目录 1 # virsh pool-define-as vmdisk --type dir --target /data/vmfs 3.创建已定义的存储池 (1)创建已定义的存储池 1 # virsh pool-build vmdisk (2)查看已定义的存储池,存储池不激活无法…

区块链概况:什么是区块链

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链技术自身仍然在飞速发展中,目前还缺乏统一的规范和标准。 wikipedia 给出的定义为: A blockchain —originally, b…

drx功能开启后_简单实用!小米手机中这些新功能真香

小米手机作为国产机热销品牌之一,它除了有好看的外观,还有很多隐藏的实用功能,今天小编就来和大家分享5个小米手机里你不知道的功能。Al电话助理看到陌生号码时,很多人第一反应就是挂掉,不想接听,但又担心自…

Ubuntu 8.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解

Linux版本:Ubuntu8.04 内核版本:Linux 2.6.24 交叉编译器版本:arm-linux-gcc-3.4.1 交叉编译器下载链接: https://share.weiyun.com/5oxlS6X (密码:36R7) 前言 1、搭建交叉编译环境 安装、配置交…

Installshield 2015 实现检测某安装文件是否存在并运行安装

最近在用installshiled 2015做安装包,用了很长时间研究明白了怎样实现在安装成功界面显示一个checkbox,选中该checkbox,就会安装选中的安装包。 首先我们要有一个installshield的工程。 其次是判断是否要显示这个checkbox。我的需求是根据某个…

区块链概况:从数字货币说起

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 从数字货币说起 货币是人类文明发展过程中的一大发明,最重要的职能包括价值尺度、流通手段、贮藏手段。很难想象离开了货币&#xff0c…

Android RecyclerView 基本使用

Android RecyclerView 基本使用 概述 RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家可以通过导入support-v7对其进行使用。 据官方的介绍,该控件用于在有限的窗口中展示大量数据集,其实这样功能的控件我们并不陌生…

lisp语言cond和if套用_在'if'语句中设置多行条件的样式?

Harley Holco..679您不需要在第二个条件行上使用4个空格.也许用:if (cond1 val1 and cond2 val2 andcond3 val3 and cond4 val4):do_something另外,不要忘记空格比您想象的更灵活:if (cond1 val1 and cond2 val2 andcond3 val3 and cond4 val4):do_somethingif (cond1 …

jvm七种垃圾收集器

JVM_七种垃圾收集器介绍 本文中的垃圾收集器研究背景为:HotSpotJDK7一、垃圾收集器概述如上图所示,垃圾回收算法一共有7个,3个属于年轻代、三个属于年老代,G1属于横跨年轻代和年老代的算法。JVM会从年轻代和年老代各选出一个算法进…

新手怎么学以太坊区块链开发?

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 在学习以太坊应用开发时,除了学习solidity开发智能合约,一个小白还应该补充 哪些知识?文本将给出相关的学习资源…

【题解】 bzoj1260: [CQOI2007]涂色paint (区间dp)

bzoj1260&#xff0c;懒得复制&#xff0c;戳我戳我 Solution: 这种题目我不会做qwq&#xff0c;太菜了区间打牌(dp) 用f[l][r]表示从l到r最少需要染几次色。状态转移方程&#xff1a; 1.\(f[l][r]min(f[l][i],f[i1][r]) (l<i<r)\) 这段染色等于俩段分别染色&#xff0c;…

[deviceone开发]-组件功能演示示例

一、简介 这个是官方比较早期对组件功能的展示集合&#xff0c;因为发布的比较早&#xff0c;只包含了部分组件&#xff0c;但是常用的组件和常用的功能都包含了。初学者推荐。二、效果图 三、相关下载 https://github.com/do-project/code4do/tree/master/demo四、相关讨论 ht…

联想g510升级换什么cpu好_老兵不死,十年前的联想 Y450 笔记本复活记

如果你是一个接触笔记本电脑比较早的用户&#xff0c;那么联想小Y的大名你一定不会陌生&#xff0c;作为联想旗下较为成功的产品线&#xff0c;彪悍的小Y在几年前就打出了名堂&#xff0c;而小Y系列笔记本里面又以 Y450 最为经典&#xff0c;Y450 引入 NVIDIA GT240M 中端移动显…

区块链和数据库

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链技术是一种不依赖第三方、通过自身分散式节点进行网路数据的存储、验证、传递和交流的一种技术方案。因此&#xff0c;有人从金融会计的角度…