20-异常处理

异常

异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下:

异常总体上可分为2大类:

1,语法错误导致的异常:,出现此异常程序就崩溃终止,后续代码不会在运行,所以应该在程序运行前就修正;

2,逻辑上的异常, 处理方式: try..except..

异常处理:

python解释器检测到错误,触发异常(也允许程序员自己触发异常).

程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关),如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理.

异常处理原因:

python解析器去执行程序,检测到了一个错误时,触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行,谁会去用一个运行着突然就崩溃的软件.

所以你必须提供一种异常处理机制来增强你程序的健壮性与容错性.

什么时候用异常处理:

try...except应该尽量少用,因为它本身就是你附加给你的程序的一种异常处理的逻辑,与你的主要的工作是没有关系的

这种东西加的多了,会导致你的代码可读性变差

而且异常处理本就不是你2b逻辑的擦屁股纸,只有在有些异常无法预知的情况下,才应该加上try...except,其他的逻辑错误应该尽量修正

异常处理方法:

1,if判断

def test():
    print(‘test running‘)
choice_dic={
    ‘1‘:test
}
while True:
    choice=input(‘>>: ‘).strip()
    if not choice or choice not in choice_dic:continue #这便是一种异常处理机制啊
    choice_dic[choice]()

2,try..except..

try:
    被检测的代码块
except 异常类型:
    try中一旦检测到指定的异常类型,则执行此位置的逻辑代码

需要注意的是:异常类只能用来处理指定的异常情况,如果非指定异常则无法处理.

s1 = ‘hello‘
try:
   int(s1)
except IndexError as e:
   print(e)
运行结果:
Traceback (most recent call last):
  File "J:/Python_Project/day09/练习/123.py", line 77, in <module>
    int(s1)
ValueError: invalid literal for int() with base 10: ‘hello‘

3,万能异常Exception

可以捕获任意的异常

s1 = ‘hello‘
try:
   int(s1)
except Exception as e:
   print(e)
运行结果:
invalid literal for int() with base 10: ‘hello‘

4,虽然万能异常好用,但是也要分情况,如果要对不同的异常定制不同的处理方式,就需要用到多分支了.

s1 = ‘hello‘
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
except Exception as e:  # 可以在最后,来一个万能异常
    print(e)

5,其他形式处理

s1 = ‘hello‘
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
#except Exception as e:
#    print(e)
else:
    print(‘try内代码块没有异常则执行我‘)
finally:
    print(‘无论异常与否,都会执行该模块,通常是进行清理工作‘)

6,主动出发异常

#_*_coding:utf-8_*_

try:
    raise TypeError(‘类型错误‘)
except Exception as e:
    print(e)
运行结果:
类型错误

7,自定义异常

#_*_coding:utf-8_*_
__author__ = ‘Linhaifeng‘

class EgonException(BaseException):
    def __init__(self,msg):
        self.msg=msg
    def __str__(self):
        return self.msg

try:
    raise EgonException(‘类型错误‘)
except EgonException as e:
    print(e)

总结:

try..except的方式比较if的方式的好处:

if本身就可以来处理异常,只不过if的方式,对于不同代码段的同一种异常,需要重复写多分支的if,而这段多分支if与真正的工作无关,写多了你的程序可读性就会及其的差。

try..except的方式,只是python提供给你一种特定的语法结构去做这件事,对于不同代码的同一种异常,python为你定制了一中类型,一个expect就可以捕捉到

try..except这种异常处理机制就是取代if那种方式,让你的程序在不牺牲可读性的前提下增强健壮性和容错性,

异常处理中为每一个异常定制了异常类型(python中统一了类与类型,类型即类),对于同一种异常,一个except就可以捕捉到,可以同时处理多段代码的异常(无需‘写多个if判断式’)减少了代码,增强了可读性

#_*_coding:utf-8_*_

#if方式处理异常
# num1=input(‘>>: ‘) #输入一个字符串试试
# if num1.isdigit():
#     int(num1) #我们的正统程序放到了这里,其余的都属于异常处理范畴
# elif num1.isspace():
#     print(‘输入的是空格,就执行我这里的逻辑‘)
# elif len(num1) == 0:
#     print(‘输入的是空,就执行我这里的逻辑‘)
# else:
#     print(‘其他情情况,执行我这里的逻辑‘)

#第二段代码
# num2=input(‘>>: ‘) #输入一个字符串试试
# int(num2)

#第三段代码
# num3=input(‘>>: ‘) #输入一个字符串试试
# int(num3)

#try..except..方式处理
try:
    #第一段代码
    num1=input(‘>>: ‘) #输入一个字符串试试
    int(num1) #我们的正统程序放到了这里,其余的都属于异常处理范畴
    #第二段代码
    num2=input(‘>>: ‘) #输入一个字符串试试
    int(num2)
    #第三段代码
    num3=input(‘>>: ‘) #输入一个字符串试试
    int(num3)
except ValueError as e:
    print(e)

使用try..except的方式

1:把错误处理和真正的工作分开来

2:代码更易组织,更清晰,复杂的工作任务更容易实现;

3:毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;

时间: 2024-10-13 03:09:33

20-异常处理的相关文章

Java基础(55):Exception类详解(转)

Java中的异常 Exception java.lang.Exception类是Java中所有异常的直接或间接父类.即Exception类是所有异常的根类. 比如程序: 1 public class ExceptionTest 2 { 3 public static void main(String[] args) 4 { 5 int a = 3; 6 int b = 0; 7 int c = a / b; 8 System.out.println(c); 9 } 10 } 编译通过,执行时结果

u近一年很变态个v分

http://ypk.39.net/search/all?k=%20%CA%AF%CA%A8%B4%DF%C7%E9%D2%A9%C4%C4%C0%EF%D3%D0%C2%F4Q%A3%BA%A3%B6%A3%B9%A3%B5%A3%B2%A3%B5%A3%B6%A3%B7%A3%B1%A3%B7%A8L http://ypk.39.net/search/all?k=%A1%FD%CF%C9%D3%CE%B4%DF%C7%E9%D2%A9%C4%C4%C0%EF%D3%D0%C2%F4Q%A3%

关于JAVA异常处理的20个最佳实践

在我们深入了解异常处理最佳实践的深层概念之前,让我们从一个最重要的概念开始,那就是理解在JAVA中有三种一般类型的可抛类: 检查性异常(checked exceptions).非检查性异常(unchecked Exceptions) 和 错误(errors). 异常类型 检查性异常(checked exceptions) 是必须在在方法的throws子句中声明的异常.它们扩展了异常,旨在成为一种"在你面前"的异常类型.JAVA希望你能够处理它们,因为它们以某种方式依赖于程序之外的外部因

java基础学习——20、异常处理

程序很难做到完美,不免有各种各样的异常.比如程序本身有bug,比如程序打印时打印机没有纸了,比如内存不足.为了解决这些异常,我们需要知道异常发生的原因.对于一些常见的异常,我们还可以提供一定的应对预案.C语言中的异常处理是简单的通过函数返回值来实现的,但返回值代表的含义往往是由惯例决定的.程序员需要查询大量的资料,才可能找到一个模糊的原因.面向对象语言,比如C++, Java, Python往往有更加复杂的异常处理机制.这里讨论Java中的异常处理机制. Java异常处理 异常处理 Java的异

20 约束 异常处理 MD5 日志

三十九, 一.类的约束 1.抛出异常    NotImplementedError 2.抽象方法 含有抽象方法的类是抽象类 抽象类中的方法全是抽象方法的是接口 抽象类不能创建对象 二.异常处理 处理完后代码可继续运行 所有异常的根是Exception 1.基本语法 2.自定义异常    (继承Exception异常的根) 自定义异常  加 异常处理 3.堆栈信息(显示错误信息的具体位置) 需引入模块 三.MD5加密   不可逆 固定格式: 应用: 四.日志 1. 2.?个?项?, 有两个?系统,

python之路---20 约束 异常处理 MD5 日志

三十九, 一.类的约束 1.抛出异常    NotImplementedError 2.抽象方法 含有抽象方法的类是抽象类 抽象类中的方法全是抽象方法的是接口 抽象类不能创建对象 二.异常处理 处理完后代码可继续运行 所有异常的根是Exception 1.基本语法 2.自定义异常    (继承Exception异常的根) 自定义异常  加 异常处理 3.堆栈信息(显示错误信息的具体位置) 需引入模块 三.MD5加密   不可逆 固定格式: 应用: 四.日志 1. 2.?个?项?, 有两个?系统,

7-43 jmu-python-字符串异常处理 (20 分)

输入一行字符串及下标,能取出相应字符.程序能对不合法数据做相应异常处理. 输入格式: 行1:输入一字符串 行2:输入字符下标 输出格式: 下标非数值异常,输出下标要整数 下标越界,输出下标越界 数据正确,输出下标对应的字符 输入样例: python 1 输出样例: y 输入样例: python a 输出样例: 下标要整数 输入样例: python 10 输出样例: 下标越界 try: s = input() x = input() print("{}".format(s[int(x)]

第20章 异常和状态管理20.7-20.13

20.7用可靠性换取开发效率 面向对象编程,编译器功能,CLR功能以及庞大的类库——使.Net Framework成为一个颇具吸引力的开发平台.但所有的这些东西,都会在你的代码中引入你没有什么控制权的“错误点”,如果 OutOfMemoryExcepton等.程序开发不可能对这些异常进行一一捕捉,让应用程序变得绝对健壮.意料意外的异常往往造成程序状态的破坏,为 了缓解对状态的破坏,可以做下面几件事: ●执行catch或finally块时,CLR不允许终止线程,所以可以向下面这样写是Transfe

Java异常处理

异常的层次结构 所有的异常类都是 java.lang.Exception 类的子类型.异常类都是 Throwable 类的子类.除了异常类 Error 类也是由 Throwable 类产生的的子类1. public String getMessage() 返回关于发生异常的细节信息,这些信息在Throwable的构造函数中被初始化2. public Throwable getCause() 返回发生异常的原因,由 Throwable 对象来表示3. public String toString(

plsql的错误信息与异常处理

7 错误消息与异常处理 7.1 异常的介绍 (1) 处理异常分为三个步骤:  A 声明异常  B 引发异常  C 处理异常 (2) 异常的特征  A 错误类型: ORA-xxxxx  运行时错误               PLS-xxxxx  编译错误  B 错误代码:xxxxx  C 错误的文本描述 案例1:编译错误的案例PLS SQL> create or replace procedure p1 is  2  begin  3  null;  4  end;  5  / Procedur