文档章节

python入门(十一) -- 错误和异常

兴趣使然的程序员
 兴趣使然的程序员
发布于 2017/05/18 10:46
字数 724
阅读 20
收藏 1

python中有两类错误:语法错误(syntax errors)和异常(exceptions)。

1、语法错误

语法错误是“真正的错误”,如果使用IDE的话(比如pyChrome),IDE中一般会有提示,即使没看到提示,运行时也会报SyntaxError错误,比如:

SyntaxError: unexpected EOF while parsing

2、异常

python中的异常体系没有Java中那么复杂(Java中分运行时异常和检查异常),python将没有语法错误、但是运行时监测到的错误称为“异常”。比如:

>>> 10 * (1/0)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
ZeroDivisionError: int division or modulo by zero
>>> 4 + spam*3
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name 'spam' is not defined
>>> '2' + 2
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: Can't convert 'int' object to str implicitly

ZeroDivisionError、NameError、TypeError都是Python中常见的异常。

2.1、异常处理

和Java中的异常处理机制(try...catch...finally)类似,python同样可以通过(try...except...finally)对异常进行处理。例如:

import sys

try:
    f = open("myfile.txt")
    s = f.readline()
    i = int(s.strip())
# 可以用as为异常实例指定一个别名
except OSError as err:
    print("OS error: {0}".format(err))
except ValueError:
    print("Could not convert data to an integer.")
# 可以不指定异常,这样的话会捕捉所有异常
except :
    print("Unexpected error:", sys.exc_info()[0])
    pass
# 和java相同,在任何情况下,finally都会被执行
finally :
    f.close()

由于和Java中的异常处理机制类似,这里只侧重于不同点:

  • python中的except后可以跟一个else子句,当 try 语句没有抛出异常时,需要执行一些代码,可以使用这个子句。
for arg in sys.argv[1:]:
    try:
        f = open(arg, 'r')
    except IOError:
        print('cannot open', arg)
    # 当没有捕获到IOError时调用
    else:
        print(arg, 'has', len(f.readlines()), 'lines')
        f.close()

        这样做的好处是可以防止“误捕获”异常。

  • 和Java中相同,finally字句一般用于释放资源,并且如果出现了不在except范围内的异常,该异常会在finally执行完毕后抛出。不同之处在于,python提供了另一种释放资源的方式:使用with语句(注意并不是所有对象都适用)。with...as...修饰的对象在使用完毕后总会自动被清理。
with open("myfile.txt") as f:
    for line in f:
        print(line)

2.2、抛出异常

raise类似于java中的throw,用于主动抛出异常。例如:

# 抛出带参数的异常
raise NameError('haha')

raise后不跟参数,表示“向外继续抛出当前的异常”(相当于Java中的throws),例如:

try:
    raise KeyboardInterrupt
except NameError:
    print('a error, but I throw it outside')
    raise 

2.3、自定义异常

python中的异常都是Exception的派生类,可以通过继承Exception类来自定义异常。和Java中异常一般以Exception结尾不同,python中的异常一般以Error结尾,例如:

class MyError(Exception):
    def __init__(self, value):
        self.value = value

    def __str__(self):
        return repr(self.value)

try:
    raise MyError('a error')
except MyError as e:
    print(e)

 

© 著作权归作者所有

兴趣使然的程序员
粉丝 23
博文 112
码字总数 87412
作品 0
深圳
程序员
私信 提问
编程语言太难学?只因你还没试过Python!

Python语言可能是第一种即简单又功能强大的编程语言。它不仅适合于初学者,也适合于专业人员使用,更加重要的是,用Python编程是一种愉快的事。本身将帮助你学习这个奇妙的语言,并且向你展示...

极客学院
2015/05/18
2.1K
7
好程序员Python分享入门之异常处理机制

好程序员Python分享入门之异常处理机制,异常即是一个事件,该事件会在程序执行过程中发生影响程序的正常执行。python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。今...

好程序员IT
06/19
16
0
ParisGabriel:Python全栈工程师(0基础到精通)教程 第二十一课(包、模块 的导入)

ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰                         Python人工智能从入门到精通 补充:包的相对导入 只对后两种导入方式有...

ParisGabriel
2018/07/19
0
0
学好 Python 的 11 个优秀资源

Python是目前最流行、最易学最强大的编程语言之一(学习Python的五大理由),无论你是新手还是老鸟,无论是用于机器学习还是web开发(Pinterest就是案例),Python都是一件利器。此外,Pytho...

oschina
2015/12/01
14.3K
15
Python爬虫入门:URLError异常处理

大家好,本节在这里主要说的是URLError还有HTTPError,以及对它们的一些处理。 1.URLError 首先解释下URLError可能产生的原因: · 网络无连接,即本机无法上网 · 连接不到特定的服务器 · ...

天才小熊猫QAQ
2017/11/01
13
0

没有更多内容

加载失败,请刷新页面

加载更多

Giraph源码分析(八)—— 统计每个SuperStep中参与计算的顶点数目

作者|白松 目的:科研中,需要分析在每次迭代过程中参与计算的顶点数目,来进一步优化系统。比如,在SSSP的compute()方法最后一行,都会把当前顶点voteToHalt,即变为InActive状态。所以每次...

数澜科技
今天
4
0
Xss过滤器(Java)

问题 最近旧的系统,遇到Xss安全问题。这个系统采用用的是spring mvc的maven工程。 解决 maven依赖配置 <properties><easapi.version>2.2.0.0</easapi.version></properties><dependenci......

亚林瓜子
今天
10
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
9
0
Set 和 Map

Set 1:基本概念 类数组对象, 内部元素唯一 let set = new Set([1, 2, 3, 2, 1]); console.log(set); // Set(3){ 1, 2, 3 } [...set]; // [1, 2, 3] 接收数组或迭代器对象 ...

凌兮洛
今天
4
0
PyTorch入门笔记一

张量 引入pytorch,生成一个随机的5x3张量 >>> from __future__ import print_function>>> import torch>>> x = torch.rand(5, 3)>>> print(x)tensor([[0.5555, 0.7301, 0.5655],......

仪山湖
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部