文档章节

异常处理

a
 abcdefghijklmnop
发布于 03/27 10:11
字数 1687
阅读 31
收藏 0

异常处理

定义 程序运行会出现各种各样的问题,例如语法编写错误或文件读写错误等,出现各种各样的bug(八阿哥) 默认情况下,程序会马上停止执行,并根据错误情况,反馈异常情况(显示栈追踪) 方便程序员进行排错和调试 哪个位置出了问题? 哪种类型的错误? 本质上讲,异常是一种类,并且有很多子类,基类为BaseException 举例

IOError
        异常说明
            输入输出异常
        异常代码
            file1 = open('file.txt','r')
        异常输出
            Traceback (most recent call last):
              File "/Users/jaykingchen/PycharmProjects/PINGINGLAB/6.Errors & Exceptions/IOError.py", line 1, in <module>
                file1 = open('file.txt','r')
            IOError: [Errno 2] No such file or directory: 'file.txt'
            Process finished with exit code 1
    ZeroDivisionError
        异常说明
            分母为0异常
        异常代码
            a = 1
            b = 0
            print a / b
        异常输出
            Traceback (most recent call last):
              File "/Users/jaykingchen/PycharmProjects/PINGINGLAB/6.Errors & Exceptions/ZeroDivisionError.py", line 3, in <module>
                print a / b
            ZeroDivisionError: integer division or modulo by zero
            Process finished with exit code 1
    TypeError
        异常说明
            类型异常,操作对本类型失效
        异常代码
            a = 1
            b = 'hello'
            print a + b
        异常输出
            Traceback (most recent call last):
              File "/Users/jaykingchen/PycharmProjects/PINGINGLAB/6.Errors & Exceptions/TypeError.py", line 3, in <module>
                print a + b
            TypeError: unsupported operand type(s) for +: 'int' and 'str'
            Process finished with exit code 1
    ValueError
        异常说明
            参数异常,无效的参数
        异常代码
            num = int('a')
            print num
        异常输出
            Traceback (most recent call last):
              File "/Users/jaykingchen/PycharmProjects/PINGINGLAB/6.Errors & Exceptions/ValueError.py", line 1, in <module>
                num = int('a')
            ValueError: invalid literal for int() with base 10: 'a'
            Process finished with exit code 1
    SyntaxError
        异常说明
            语法异常
        异常代码
            a = 1 +
        异常输出
              File "/Users/jaykingchen/PycharmProjects/PINGINGLAB/6.Errors & Exceptions/SyntaxError.py", line 1
                a = 1 +
                      ^
            SyntaxError: invalid syntax
    NameError
        异常说明
            名字异常,对象未定义
        异常代码
            a = 1
            print a + b
        异常输出
            Traceback (most recent call last):
              File "/Users/jaykingchen/PycharmProjects/PINGINGLAB/6.Errors & Exceptions/NameError.py", line 2, in <module>
                print a + b
            NameError: name 'b' is not defined
            Process finished with exit code 1
    AttributeError
        异常说明
            属性异常,对象没有此属性/方法
        异常代码
            a = 1
            b = 'hello'
            b.coun()
            print b,a
        异常输出
            Traceback (most recent call last):
              File "/Users/jaykingchen/PycharmProjects/PINGINGLAB/6.Errors & Exceptions/ArritbuteError.py", line 3, in <module>
                b.coun()
            AttributeError: 'str' object has no attribute 'coun'
            Process finished with exit code 1

异常处理

功能 提高程序健壮性 实现程序的友好度 实现程序的功能调试

异常捕获

try...except...
        功能
            执行try语句,若没有异常,则正常执行,忽略except代码块
            若出现异常,则跳过try语句,执行except代码块
                try/except块的工作原理有点像if语句,if语句根据布尔表达式的结果决定如何做,而try/except块根据是否出现了异常决定如何做

举例 例1 捕获一个异常 try: a = 1 b = 'hello' print a + b except TypeError: try: a = 1 b = 'hello' print a + b except TypeError as e: print 'except:', e print 'invalid Type, please try again!' 例2 捕获多个异常,同一处理结果 try: s = int(raw_input('how old are you:')) print s except (TypeError, ValueError): print 'Please enter an integer value!' 例3 捕获多个异常,不同处理结果 try: s = int(raw_input('how old are you:')) print s except TypeError : >>> int(1,2) Traceback (most recent call last): File "<input>", line 1, in <module> TypeError: int() can't convert non-string with explicit base print 'Invalid type,Please enter an integer value!' except ValueError: how old are you:hi Invalid value,Please enter an integer value! print 'Invalid value,Please enter an integer value!' 例4 捕获所有异常 try: a = 1 b = 0 print a / b except : print 'Error here, please try again!' 例5 捕获异常,与while循环语句结合 def get_age(): while True: try: n = int(input('How old are you?')) return n except : print('Please enter an integer value.')

            get_age()
        例6
            捕获异常,与else语句结合
                try:
                    a = 1
                    b = 2
                    print a
                except TypeError:
                    print 'invalid Type, please try again!'
                else:
                    若没有异常,则执行else语句
                    print b

异常清理

try...finally 功能 finally语句用于实现异常清理,不管最终try语句是否有异常,都必须执行finally语句 例如打开一个文件进行操作,不管是否异常,都必须在处理之后将其关闭,通过finally语句可以解决 举例 try: file1 = open('file.txt','w') file1.read() finally: file1.close() print 'close the file1' try...except...finally 功能 finally语句用于实现异常清理,不管最终try语句是否有异常,都必须执行finally语句 例如打开一个文件进行操作,不管是否异常,都必须在处理之后将其关闭,通过finally语句可以解决 举例 try: file1 = open('file.txt','w') file1.read()

        except IOError:
            print 'IOError, please try again!'
        
        finally:
            file1.close()
            print 'close the file1'
try...except...else...finally
    功能
        finally语句用于实现异常清理,不管最终try语句是否有异常,都必须执行finally语句
        例如打开一个文件进行操作,不管是否异常,都必须在处理之后将其关闭,通过finally语句可以解决
    举例
        try:
            file1 = open('file.txt','w+')
            file1.read()
        
        except IOError:
            print 'IOError, please try again!'
        
        else:
            print 'good!'
        
        finally:
            file1.close()
            print 'close the file1'
with...as
    功能
        with类似finally的功能,用于实现程序不管是否异常,都能正常关闭
            with 表达式 as 变量
    举例
            with open('file.txt','w') as f:
            不管是否出现异常,通过with语句执行的,最终需要清除
                f.read()

异常触发

raise 功能 Raise用于抛出异常,异常可以自己定义 语法 raise [SomeException [, args [, traceback]]] 第一个参数,SomeExcpetion是触发异常的名字 第二个符号为可选的 args(比如参数,值),来传给异常 最后一项参数,traceback,同样是可选的 举例 例1 >>> raise NameError Traceback (most recent call last): File "<input>", line 1, in <module> NameError >>> raise TypeError Traceback (most recent call last): File "<input>", line 1, in <module> TypeError >>> raise IndexError Traceback (most recent call last): File "<input>", line 1, in <module> IndexError 例2 def my_number(n): if n > 0: raise ValueError, 'invalid number! n = 0 or n < 0' print 'n: ', n my_number(1) 例3 def my_number(n): if n > 0: raise ValueError, 'invalid number! n = 0 or n < 0' print 'n: ', n

try:
                my_number(1)
            except ValueError as e:
                print e, 'please try again!'
assert
    功能
        Assert断言是有条件地触发异常,如果不满足则抛出AssertionError异常
        相比raise,多了条件判断;但是不用像raise一样,抛出各种异常类型
    语法
        assert expression[, arguments]
    举例
        例1
            >>> assert 1 == 1
            >>> assert 1 == 2
            Traceback (most recent call last):
              File "<input>", line 1, in <module>
            AssertionError
            >>> assert 1 == 2, 'one does not equal two!'
            Traceback (most recent call last):
              File "<input>", line 1, in <module>
            AssertionError: one does not equal two!
        例2
            try:
                assert 1 == 2, 'one does not equal two!'
            except AssertionError:
                print 'please try again!'
        例3
            def my_number(n):
                assert n > 0, 'invalid number! n = 0 or n < 0'
                print 'n: ', n
            
            my_number(10)
            my_number(-1)​

© 著作权归作者所有

上一篇: Django Models
下一篇: 输入输出
a
粉丝 0
博文 24
码字总数 40504
作品 0
广州
私信 提问
加载中

评论(0)

java运行时异常和非运行时异常区分

(1)运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由...

席道坤
2016/11/05
128
0
JAVA基础教程之JAVA异常机制

今天我们主要来说一说JAVA异常机制方面的内容。自设JAVA学习群457036818,大家可以进行技术交流一下 一、 异常的概念和Java异常体系结构 异常是程序运行过程中出现的错误。本文主要传授的是一...

潭州学院
2015/05/18
371
0
SpringMVC异常统一处理(异常信息的国际化,日志记录)

JAVA EE项目中,不管是对底层的数据操作,还是业务层的处理过程,还是控制层的处理,都不可避免的会遇到各种可预知的(业务异常主动抛出)、不可预知的异常需要处理。一般dao层、service层的异常都...

留给明天
2016/11/17
171
0
NDK开发---C++学习(七):异常

前言 C++的异常处理机制能够将异常检测与异常处理分离开来,当异常发生时,它能自动调用异常处理程序进行错误处理。把错误处理代码独立出来的异常处理机制增加了程序的清晰性和可维护性,使程...

浮生若梦zp
2017/12/01
0
0
JAVA基础再回首(十九)——异常的概述、Try…Catch、多异常处理、Throws、throw、finally、自定义异常及异常的注意事项

JAVA基础再回首(十九)——异常的概述、Try…Catch、多异常处理、Throws、throw、finally、自定义异常及异常的注意事项 版权声明:转载必须注明本文转自程序员杜鹏程的博客:http://blog.cs...

Aduroidpc
2016/09/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

leetcode1227(面试题 17.09. 第 k 个数)--C语言实现

求: 有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。 示例 1:...

拓拔北海
20分钟前
17
0
字节二面问我计算机网络的拥塞控制问题,清明节假,我终于搞明白了...

多点头发,少点代码 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues。 https://github.com/midou-tech/articles 本来想先更新TCP的基础和TCP可靠性等问题的,但是被你们暗示了,就先更...

龙跃十二
20分钟前
19
0
GIT 使用

创建问题 如果提示 'ssh-keygen' 不是内部或外部命令 1.需要安装git软件。 2.默认环境变量没有配置正确。 默认安装在Git\usr\bin目录下,通过cd命令进入该页面,然后执行命令即可。 常用命令...

奔跑的android
26分钟前
19
0
Centos8 配置静态IP

概述:在systemd还没有普及之前,重启服务都是/etc/init.d/xxx restart就可以了,包括网络服务!可是大概就是systemd普及的时候,我发现,用虚拟机安装的系统其网络服务都无法通过systemctl...

W_Lu
30分钟前
28
0
java 金钱元和分互相转换

import java.math.BigDecimal;import java.text.DecimalFormat;/** * @ProjectName: LieIdle * @Package: com.jinzhending.comm * @Author: huat * @Date: 2020/4/6 9:04 * ......

冥焱
34分钟前
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部