专栏首页keinYePython 错误处理

Python 错误处理

程序在运行的过程中总是会遇到各种各样的问题,有一部分是 BUG,另外一部分我们称之为异常(或错误)。大多数编程语言均使用以下语句来处理异常,Python 也不例外。
try:
    pass
except:
    pass
finally:
    pass

先来看一个最简单的处理异常的示例

#!/usr/bin/evn python3
# -*- coding:utf-8 -*-
try:
    r = 1 / 0
except:
    print('except')

以上代码执行结果如下

except

当我们认为一段代码可能会出现错误时,我们可以使用 try 语句对错误进行处理,否则错误将一级级向上报,直到有函数可以处理该错误。若无函数处理该错误,程序将推出执行。

在出现错误时我们可以针对错误类型的不同,来输出不同的结果

#!/usr/bin/evn python3
# -*- coding:utf-8 -*-
try:
    r = 1 / 0
except ZeroDivisionError:
    print ("The second number can't be zero!")
except ValueError:
    print "Value Error."

执行以上代码,我们将得到以下结果

The second number can't be zero!

现在我们将代码进行修改,修改后结果如下

#!/usr/bin/evn python3
# -*- coding:utf-8 -*-
try:
    r = 1 / '1'
except ZeroDivisionError:
    print ("The second number can't be zero!")
except ValueError:
    print "Value Error."

执行以上代码,我们将得到以下结果

Value Error.

从以上代码可以看出,针对不同的错误类型我们可以进行不同的输出结果,在 Python 中常用的错误类型如下

异常

描述

NameError

尝试访问一个没有申明的变量

ZeroDivisionError

除数为 0

SyntaxError

语法错误

IndexError

索引超出序列范围

KeyError

请求一个不存在的字典关键字

IOError

输入输出错误(比如你要读的文件不存在)

AttributeError

尝试访问未知的对象属性

在 try 语句中我们可以使用 else 和 finally 关键字,当执行 try 后的内容 except 后的内容被跳过时执行 else 后的内容;而 finally 后的语句无论前面执行的是 try 后的语句还是 except 后的语句都会被执行。

#!/usr/bin/evn python3
# -*- coding:utf-8 -*-
while True:
    try:
        x = raw_input("the first number:")
        y = raw_input("the second number:")
        
        r = float(x)/float(y)
    except:
        print('except try again')
    else:
        print('else')
    finally:
        print('finally')

执行结果如下

the first number:1
the second number:2
else
finally
the first number:1
the second number:0
except try again
finally

try...except...在某些情况下能够替代 if...else.. 的条件语句

大多数情况下 python 解释器已经给出了完善的错误提示信息,我们无需在单独编写提示信息,那我们我们该如何使用系统默认的提示信息呢,我们可以通过参数 e 来获取系统默认的提示信息。

#!/usr/bin/evn python3
# -*- coding:utf-8 -*-
while True:
    try:
        x = raw_input("the first number:")
        y = raw_input("the second number:")
        
        r = float(x)/float(y)
    except ZeroDivisionError as e:
        print(e)
    else:
        print('else')
    finally:
        print('finally')

执行结果如下

the first number:1
the second number:0
float division by zero
finally
the first number:1
the second number:-
could not convert string to float: '-'
finally
the first number:1
the second number:1
else
finally

在以上代码中我们并未编写任何的错误提示信息,但是在出现错误时程序正常打印了错误信息 'float division by zero''could not convert string to float: '-''

程序在运行的过程中总是会遇到各种各样的问题,有一部分是 BUG,另外一部分我们称之为异常(或错误)。大多数编程语言均使用以下语句来处理异常,Python 也不例外。

try:
    pass
except:
    pass
finally:
    pass

先来看一个最简单的处理异常的示例

#!/usr/bin/evn python3
# -*- coding:utf-8 -*-
try:
    r = 1 / 0
except:
    print('except')

以上代码执行结果如下

except

当我们认为一段代码可能会出现错误时,我们可以使用 try 语句对错误进行处理,否则错误将一级级向上报,直到有函数可以处理该错误。若无函数处理该错误,程序将推出执行。

在出现错误时我们可以针对错误类型的不同,来输出不同的结果

#!/usr/bin/evn python3
# -*- coding:utf-8 -*-
try:
    r = 1 / 0
except ZeroDivisionError:
    print ("The second number can't be zero!")
except ValueError:
    print "Value Error."

执行以上代码,我们将得到以下结果

The second number can't be zero!

现在我们将代码进行修改,修改后结果如下

#!/usr/bin/evn python3
# -*- coding:utf-8 -*-
try:
    r = 1 / '1'
except ZeroDivisionError:
    print ("The second number can't be zero!")
except ValueError:
    print "Value Error."

执行以上代码,我们将得到以下结果

Value Error.

从以上代码可以看出,针对不同的错误类型我们可以进行不同的输出结果,在 Python 中常用的错误类型如下

异常

描述

NameError

尝试访问一个没有申明的变量

ZeroDivisionError

除数为 0

SyntaxError

语法错误

IndexError

索引超出序列范围

KeyError

请求一个不存在的字典关键字

IOError

输入输出错误(比如你要读的文件不存在)

AttributeError

尝试访问未知的对象属性

在 try 语句中我们可以使用 else 和 finally 关键字,当执行 try 后的内容 except 后的内容被跳过时执行 else 后的内容;而 finally 后的语句无论前面执行的是 try 后的语句还是 except 后的语句都会被执行。

#!/usr/bin/evn python3
# -*- coding:utf-8 -*-
while True:
    try:
        x = raw_input("the first number:")
        y = raw_input("the second number:")
        
        r = float(x)/float(y)
    except:
        print('except try again')
    else:
        print('else')
    finally:
        print('finally')

执行结果如下

the first number:1
the second number:2
else
finally
the first number:1
the second number:0
except try again
finally

try...except...在某些情况下能够替代 if...else.. 的条件语句

大多数情况下 python 解释器已经给出了完善的错误提示信息,我们无需在单独编写提示信息,那我们我们该如何使用系统默认的提示信息呢,我们可以通过参数 e 来获取系统默认的提示信息。

#!/usr/bin/evn python3
# -*- coding:utf-8 -*-
while True:
    try:
        x = raw_input("the first number:")
        y = raw_input("the second number:")
        
        r = float(x)/float(y)
    except ZeroDivisionError as e:
        print(e)
    else:
        print('else')
    finally:
        print('finally')

执行结果如下

the first number:1
the second number:0
float division by zero
finally
the first number:1
the second number:-
could not convert string to float: '-'
finally
the first number:1
the second number:1
else
finally

在以上代码中我们并未编写任何的错误提示信息,但是在出现错误时程序正常打印了错误信息 'float division by zero''could not convert string to float: '-''

本文分享自微信公众号 - keinYe(keinYe_zh),作者:keinYe

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 外行学 Python 爬虫 第六篇 动态翻页

    前面几篇文章,初步完成了从网络请求、数据解析、数据存储的整个过程,完成了一个爬虫所需的全部功能。但是通过对数据库中数据的分析会发现数据库中的元件数量比网站上的元...

    keinYe
  • Python IO编程

    IO 在编程语言中特指输入和输出「即 input 和 output」。在 IO 编程中 stream (流)是一个重要的概念,一个完整的 IO 操作通常含有 i...

    keinYe
  • SQLAlchemy 定义关系

    数据库中的数据表可以看做是现实世界中一类事物的抽象,而表中的每一行数据都可以看做是一个实例「即现实世界的实体」。在现实世界中每个事物/实体都不是单独不是单独存在...

    keinYe
  • 如何反编译H5界面的源代码(fiddler抓包)

    查看端口号:8888 依次点击: Tools ->Options -> Connections -> Allow remote computers to c...

    王小婷
  • chronyd 时间同步服务

    heidsoft
  • LeetCode 662. Maximum Width of Binary Tree

    Given a binary tree, write a function to get the maximum width of the given tree...

    大学里的混子
  • python 自动监测并拷贝U盘文件

    今天给大家介绍一个可以偷偷拷贝别人 U 盘里文件的 python 程序,没错,程序自动监测 U 盘插入并读取 U 盘内文件,拷贝到本地电脑。

    谭小谭
  • Google Code Jam 2020 Qualification Round: Vestigium Solution

    Google Code Jam 2020 Qualification Round: Vestigium Solution

    包子面试培训
  • 开发 | 使用 Rodeo 分析总统候选人的推特内容

    AI 科技评论按 :本文作者Datartisan,载于其知乎专栏——Datartisan数据工匠。AI 科技评论转载已获得原作者授权。 介绍 选举季已经到来,对...

    AI科技评论
  • 是否为同一二叉搜索树

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    喜欢ctrl的cxk

扫码关注云+社区

领取腾讯云代金券