python异常处理的语法格式_Python异常处理

Python异常处理

一. 异常的概念

程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常。

程序停止执行并且提示错误信息 这个动作,我们通常称之为:抛出(raise)异常。

二. 捕获异常

程序开发时,很难将 所有的特殊情况 都处理的面面俱到,通过 异常捕获 可以针对突发事件做集中的处理,从而保证程序的 稳定性和健壮性。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppZHVvY2hvdTk2Mw==,size_16,color_FFFFFF,t_70

程序开发时,很难将 所有的特殊情况 都处理的面面俱到,通过 异常捕获 可以针对突发事件做集中的处理,从而保证程序的 稳定性和健壮性

错误类型捕获

先看个例子:

>ipython

Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)]

Type 'copyright', 'credits' or 'license' for more information

IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: #提示用户输入一个整数

IIn [2]: num = int(input("输入一个整数: "))

输入一个整数: 10

In [3]: num = int(input("输入一个整数: "))

输入一个整数: i

---------------------------------------------------------------------------

ValueError Traceback (most recent call last)

in

----> 1 num = int(input("输入一个整数: "))

ValueError: invalid literal for int() with base 10: 'i'

In [4]:

在程序开发中,如果 对某些代码的执行不能确定是否正确,可以增加 try(尝试) 来 捕获异常

捕获异常最简单的语法格式:

try:

尝试执行的代码

except:

出现错误的处理

try 尝试,下方编写要尝试代码,不确定是否能够正常执行的代码

except 如果不是,下方编写尝试失败的代码

试着来解决上一个例子出现的问题

try: # 提示用户输入一个数字

num = int(input("请输入数字:"))

except:

print("请输入正确的数字")

更进一步:错误类型捕获

在程序执行时,可能会遇到 不同类型的异常,并且需要 针对不同类型的异常,做出不同的响应,这个时候,就需要捕获错误类型了

语法如下:

try:

pass # 尝试执行的代码

except 错误类型1:

pass # 针对错误类型1,对应的代码处理

except (错误类型2, 错误类型3):

pass # 针对错误类型2 和 3,对应的代码处理

except Exception as result:

print("未知错误 %s" % result)

异常类型当 Python 解释器 抛出异常 时,最后一行错误信息的第一个单词,就是错误类型

接着完善刚才的代码:

try:

num = int(input("请输入整数:"))

result = 8 / num

print(result)

except ValueError:

print("请输入正确的整数")

except ZeroDivisionError:

print("除 0 错误")

捕获未知错误

在开发时,要预判到所有可能出现的错误,还是有一定难度的。如果希望程序 无论出现任何错误,都不会因为 Python 解释器 抛出异常而被终止,可以再增加一个 except

语法如下:

except Exception as result:

print("未知错误 %s" % result)

注意:result是推荐写法,可以任意指定。

异常捕获的完整语法

在实际开发中,为了能够处理复杂的异常情况,完整的异常语法如下:

try: # 尝试执行的代码

pass

except 错误类型1:

# 针对错误类型1,对应的代码处理

pass

except 错误类型2:

# 针对错误类型2,对应的代码处理

pass

except (错误类型3, 错误类型4):

#针对错误类型3 和 4,对应的代码处理

pass

except Exception as result:

# 打印错误信息

print(result)

else:

# 没有异常才会执行的代码

pass

finally:

# 无论是否有异常,都会执行的代码

print("无论是否有异常,都会执行的代码")

else 只有在没有异常时才会执行的代码

finally 无论是否有异常,都会执行的代码

之前一个演练的 完整捕获异常 的代码如下:

try:

num = int(input("请输入整数:"))

result = 8 / num

print(result)

except ValueError:

print("请输入正确的整数")

except ZeroDivisionError:

print("除 0 错误")

except Exception as result:

print("未知错误 %s" % result)

else:

print("正常执行")

finally:

print("执行完成,但是不保证正确")

三. 异常的传递

当 函数/方法 执行 出现异常,会 将异常传递 给 函数/方法 的 调用一方;

如果 传递到主程序,仍然 没有异常处理,程序才会被终止。

提示:

在开发中,可以在主函数中增加 异常捕获,而在主函数中调用的其他函数,只要出现异常,都会传递到主函数的 异常捕获 中。

这样就不需要在代码中,增加大量的 异常捕获,能够保证代码的整洁。

例子:

定义函数 demo1() 提示用户输入一个整数并且返回

定义函数 demo2() 调用 demo1()

在主程序中调用 demo2()

def demo1():

return int(input("请输入一个整数:"))

def demo2():

return demo1()

# 测试:

try:

print(demo2())

except ValueError:

print("请输入正确的整数")

except Exception as result:

print("未知错误 %s" % result)

四. 主动抛出异常–raise

在开发中,除了 代码执行出错 Python 解释器会 抛出 异常之外,还可以根据 应用程序 特有的业务需求 主动抛出异常。

来看个例子:

需求

定义 input_password 函数,提示用户输入密码

如果用户输入长度 < 8,抛出异常

如果用户输入长度 >=8,返回输入的密码

注意

当前函数 只负责 提示用户输入密码,如果 密码长度不正确,需要其他的函数进行额外处理

因此可以 抛出异常,由其他需要处理的函数 捕获异常

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppZHVvY2hvdTk2Mw==,size_16,color_FFFFFF,t_70

Python 中提供了一个 Exception 异常类

在开发时,如果满足 特定业务需求时,希望 抛出异常,可以:

创建 一个 Exception 的 对象

使用 raise 关键字 抛出 异常对象

实现

def input_password():

# 1. 提示用户输入密码

pwd = input("请输入密码:")

# 2. 判断密码长度,如果长度 >= 8,返回用户输入的密码

if len(pwd) >= 8:

return pwd

# 3. 密码长度不够,需要抛出异常

# 1> 创建异常对象 - 使用异常的错误信息字符串作为参数

ex = Exception("密码长度不够")

# 2> 抛出异常对象

raise ex

# 测试:

try:

userpwd = input_password()

print("user_pwd: ",userpwd)

except Exception as result:

print("发现错误:%s" % result)

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

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

相关文章

Cheatsheet: 2010 04.26 ~ 04.30

Web Telling robots about your crawl-able Ajax apps Scrollin’ Scrollin’ Scrollin’ to the NextPoint The Big List of JavaScript, CSS, and HTML Development Tools, Libraries, Projects, and Books Database MongoDB vs. SQL Server 2008 Performance Showdown Raven…

linux防ddos 软件下载,linux下防DDOS工具

DDoS deflate是一款免费的用来防御和减轻DDoS攻击的脚本。它通过netstat监测跟踪创建大量网络连接的IP地址&#xff0c;在检测到某个结点超过预设的限 制时&#xff0c;该程序会通过APF或IPTABLES禁止或阻挡这些IP.DDoS deflate官方网站&#xff1a;http://deflate.medialayer.…

${oid?c}的使用

编辑器加载中... ${oid?c} 写在js里会报错&#xff0c;其实根本就不用转换&#xff0c;但是如果在非javascript里就要转换 &#xff0c;因为会出现逗号问题 还有个问题要注意下&#xff1a; var orderId document.getElementsByName("orderId"); 获取的orderId如果…

从零开始山寨Caffe·零:必先利其器

工作环境 巧妇有了米炊 众所周知&#xff0c;Caffe是在Linux下写的&#xff0c;所以长久以来&#xff0c;大家都认为跑Caffe&#xff0c;先装Linux。 niuzhiheng大神发起了caffe-windows项目&#xff08;解决了一些编译、API相异问题&#xff09; 以及willyd大神发起的caffe-wi…

python单例_Python - 单例模式(Singleton)

单例模式(Singleton) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/23374575 单例模式 , 类的实例从始至终, 只 被创建一次 , 这些类可以用来管理一些资源; 需要 继承Object类 , 才可以使用类的方法 super() , 只实例化一次; 参见Python文档: Note super() …

Linux抓eth0网卡包的命令,Linux系统使用tcpdump命令抓包

前提条件&#xff1a;1. 一台安装有Linux的机器….这个是必要的&#xff1b;2. Tcpdump程序;3. 以下所有均是root用户登录操作&#xff0c;且命令不支持直接复制到Linux控制台&#xff0c;请手工输入&#xff01;4.工具以及教程文档下载地址 点我操作步骤&#xff1a…

SilverLight非托管代码的初始化进度条方法

SilverLight非托管代码的初始化进度条方法 <script type"text/javascript"> 错误处理函数 function onSilverlightError(sender, args) ... //下载进度函数 function onSourceDownloadProgressChanged(sender, eventArgs) { sender.findN…

超全的学习资料——Oracle 从入门到精通

Oracle 从入门到精通 目录 一、SQL...................................................................................................................................................8 1.1、基本概念&#xff1a;..................................................…

common-collections中Java反序列化漏洞导致的RCE原理分析

2019独角兽企业重金招聘Python工程师标准>>> common-collections中Java反序列化漏洞导致的RCE原理分析 隐形人真忙 2015/11/11 22:40 0x00 背景 这几天在zone看到了有人提及了有关于common-collections包的RCE漏洞&#xff0c;并且http://zone.wooyun.org/content/…

linux nfs 配置_centos7 NFS 配置

NFS是什么最近项目上有这么个需求&#xff0c;客户端上传文件的时候&#xff0c;想把文件上传到另外一台服务器。本来想用ftp的&#xff0c;觉得太麻烦&#xff0c;就各种查资料&#xff0c;请教别人&#xff0c;后来发现&#xff0c;NFS这个东东真不错。NFS(网络文件系统)服务…

linux命令 waf,常用waf命令

常用waf命令一、配置及编译&#xff1a;$ ./waf configure [option]$ ./waf帮助&#xff1a; $ ./waf --help配置调试&#xff0c;优化调试&#xff1a;$ ./waf -d configure: debug,optimized改变flag: $ CXXFLAGS"-O3" ./waf configure或者&#xff1a; $CXXg-…

Windows Server 2003 导入Java生成的证书,保证iis对CAS的访问

开始 -- 运行-- mmc 打开了一个控制台程序 菜单 --> 文件 --> 添加/删除管理单元 (Ctrl M) 打开界面: 点击 "添加" 按钮,打开界面后选择 "证书",继续点此界面的添加,完成添加证书管理的操作 中间需要选择账户,我就选择的是 我的用户账户, 也可…

shell命令tree

在Windwows下很喜欢tree命令&#xff0c;在CenntOS下也有这条命令&#xff0c;在网上找到了源代码和一段简单的脚本&#xff0c; 完整的tree源代码可以在这里下载&#xff1a; ftp://mama.indstate.edu/linux/tree/ 简易的tree脚本如下&#xff1a; #!/bin/sh ################…

ulimit

ulimit用于shell启动进程所占用的资源. ulimit [-acdfHlmnpsStvw] [size] -H 设置硬资源限制.-S 设置软资源限制.-a 显示当前所有的资源限制.-c size:设置core文件的最大值.单位:blocks-d size:设置数据段的最大值.单位:kbytes-f size:设置创建文件的最大值.单位:blocks-l size…

命令点亮硬盘灯_macOS下移动硬盘无法挂载且硬盘灯一直闪烁的解决方法

致力于成为您终身的苹果管家点击上方蓝字 关注我们小编近日遇到一个诡异的问题&#xff0c;小编的移动硬盘不定期的会自动断开&#xff0c;提示未正常拔出&#xff0c;实际上一直没有动过连接线&#xff0c;然后硬盘一直处于未加载的状态&#xff0c;硬盘灯也一直闪烁不停。通…

linux 挂载多余空间,linux 空间不够,磁盘挂载

1.给新的磁盘分区fdisk /dev/sdb2.格式化新的磁盘分区mkfs.ext4 /dev/sdb13挂载磁盘到sdb1mount /dev/sdb1 /mnt/sdb1/4系统自动挂载vim /etc/fstab/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1UUID5714863f-0d34-4269-8c9f-59d48af70cb…

常用正则表达式,来自新浪微博的js

STK.register("common.setting.rule", function(a) { var b {}; b.isEmpty function(a) { return /^\s*$/g.test(a.replace(/^\s|\s$/g, "")) }; b.isNumber function(a) { return /^[\-]?\d(\.\d)?$/.test(a) }; b.isName function(a) { return /^[…

转:VC9(VC2008.net) 编译安装 boost 1.39 库

简介Boost库是一个经过千锤百炼、可移植、提供源代码的C库&#xff0c;&#xff0c;作为标准库的后备&#xff0c;是C 标准化进程的发动机之一。 Boost库由C标准委员会库工作组成员发起&#xff0c;其中有些内容有望成为下一代C标准库内容。在C社区中影响甚大&#xff0c;其成 …

如何在跑cts的时候生成log_为什么要买奥铃CTS?听听用户的评价

【原创首发】本文系商车邦原创文章文/芦齐 【商车邦导读】沧州用户的一致好评并非偶然&#xff0c;而是奥铃在轻卡领域深耕细作的必然。初次来到沧州黄骅&#xff0c;就能感受到这座海鲜小城浓浓的“海”味。海鲜曾经是内陆稀有的食材&#xff0c;如今随着人民生活水平的提高&a…

linux要求关闭httpd服务,Apache2.4.4的安装及实现service和chkconfig系统控制httpd开启关闭...

Apache2.4.4的安装及实现service和chkconfig系统控制httpd开启关闭不废话了&#xff0c;根据apache2.4.4的手册我们知道还要有三个准备包&#xff0c;如下&#xff1a; apr-1.4.6.tar.bz2 apr-uti-1.5.1.tar.bz2和pcre-8.32.tar.bz2安装apr# tar -jxvf apr-1.4.6.tar.bz2# cd…