python基础-异常

什么是异常?

python用异常对象(exception object)来表示异常情况。遇到错误后,就会引发异常。如果异常未被处理或捕获,程序就会用所谓的回溯(traceback)终止执行。

>>> 1 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero

如何引发异常?

使用raise语句引发异常:可以使用一个类(Exception的子类)或者实例参数调用raise语句。使用类时,程序会自动创建实例。

>>> raise Exception
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
Exception
>>> raise Exception(‘some wrong‘)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
Exception: some wrong

exceptions模块中内置的异常类:

>>> import exceptions
>>> dir(exceptions)
[‘ArithmeticError‘, ‘AssertionError‘, ‘AttributeError‘, ‘BaseException‘, ‘BufferError‘, ‘BytesWarning‘, ‘DeprecationWarn
ing‘, ‘EOFError‘, ‘EnvironmentError‘, ‘Exception‘, ‘FloatingPointError‘, ‘FutureWarning‘, ‘GeneratorExit‘, ‘IOError‘, ‘I
mportError‘, ‘ImportWarning‘, ‘IndentationError‘, ‘IndexError‘, ‘KeyError‘, ‘KeyboardInterrupt‘, ‘LookupError‘, ‘MemoryE
rror‘, ‘NameError‘, ‘NotImplementedError‘, ‘OSError‘, ‘OverflowError‘, ‘PendingDeprecationWarning‘, ‘ReferenceError‘, ‘R
untimeError‘, ‘RuntimeWarning‘, ‘StandardError‘, ‘StopIteration‘, ‘SyntaxError‘, ‘SyntaxWarning‘, ‘SystemError‘, ‘System
Exit‘, ‘TabError‘, ‘TypeError‘, ‘UnboundLocalError‘, ‘UnicodeDecodeError‘, ‘UnicodeEncodeError‘, ‘UnicodeError‘, ‘Unicod
eTranslateError‘, ‘UnicodeWarning‘, ‘UserWarning‘, ‘ValueError‘, ‘Warning‘, ‘WindowsError‘, ‘ZeroDivisionError‘, ‘__doc_
_‘, ‘__name__‘, ‘__package__‘]

自定义异常类

创建的异常类需从Exception类直接或者间接继承。

class SomeCustomException(Exception): pass

捕捉异常

使用try/except语句捕捉异常:

try:
    1 / 0
except ZeroDivisionError:
    print "The second number can‘t be zero!"

捕捉异常之后重新引发异常

使用无参数的raise语句重新引发异常

class MuffledCalculator:
    muffled = False
    def calc(self, expr):
        try:
            return eval(expr)
        except ZeroDivisionError:
            if self.muffled:
                print "Division by zero is illegal"
            else:
                raise
>>> calculator = MuffledCalculator()
>>> calculator.calc(‘10 / 2‘)
5
>>> calculator.calc(‘10 / 0‘)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in calc
  File "<string>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>> calculator.muffled = True
>>> calculator.calc(‘10 / 0‘)
Division by zero is illegal
>>>

捕捉多个异常

1.可以增加多个except子句

    try:
        1 / 0
    except ZeroDivisionError:
        print "Division by zero is illegal"
    except TypeError:
        print "That wasn‘t a number. was it?"

2.用一个块捕捉异常

    try:
        1 / 0
    except (ZeroDivisionError, TypeError, NameError):
        print "Your numbers were bogus"

捕捉对象

如果希望在except子句中访问异常对象本身,可以使用两个参数

  try:
        1 / 0
    except (ZeroDivisionError, TypeError, NameError), e:
        print e

捕捉全部异常

  try:
        1 / 0
    except:
        print ‘Something wrong happened‘

else子句

else在当未发生异常时执行

    try:
        1 / 2
    except:
        print ‘Something wrong happened‘
    else:
        print ‘normal‘

finally子句

不管异常是否会发生,finally子句总是会执行。它可以用来在可能的异常后面进行清理的工作。

  try:
        1/ 0
    except NameError:
        print ‘Unknown variable‘
    else:
        print ‘That went well!‘
    finally:
        print ‘Cleaning up‘

finally用来关闭文件或者网络套接字是会非常有用。

异常和函数

如果异常在函数内引发而不被处理,它就会传播至函数调用的地方。如果在那里也没被处理,它就会继续传播,一直到达主程序。如果那里没有异常处理程序,程序就会带着堆栈跟踪中止。

例子:

>>> def faulty():
...     raise Exception(‘someting is wrong‘)
...
>>> def ignore_exception():
...     faulty()
...
>>> def handle_exception():
...     try:
...         faulty()
...     except:
...         print ‘Exception handled‘
...
>>> ignore_exception()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in ignore_exception
  File "<stdin>", line 2, in faulty
Exception: someting is wrong
>>> handle_exception()
Exception handled
>>>

faulty中产生的异常通过faulty和ignore_exception传播,最终导致了堆栈跟踪。同样地,它也传播到了handle_exception,但在这个函数中被try/except语句处理。

只要异常try/except语句查看对象是否存在特定的特性:

class TestClass:
    pass

if __name__ == ‘__main__‘:
    obj = TestClass()
    try:
        obj.write
    except AttributeError:
        print ‘The object is not writeable‘
    else:
        print ‘The object is writeable‘

python基础-异常

时间: 2024-08-19 05:18:18

python基础-异常的相关文章

python基础--异常,对象和迭代器

异常处理 面向对象 迭代器和生成器 python异常处理 下面代码触发了一个FileNotFoundError >>> open("notexist.txt") Traceback (most recent call last): File "<stdin>", line 1, in <module> FileNotFoundError: [Errno 2] No such file or directory: 'notex

python基础-----异常问题

---恢复内容开始--- 当发生python不知所措的错误时,python会创建一个异常对象, 如果你编写处理该异常的代码,程序将会继续运行: 如果你未对异常做任何处理,程序将会停止,并显示一个traceback,其中包含异常的报告. 如果让用户看见traceback,这太low了!! 1.处理ZeroDivisionError异常 print(5/0) #0是不能作为除数的 ####################### Traceback (most recent call last): F

[Python基础]008.异常

异常 异常处理 捕获异常 抛出异常 自定义异常 一些常见的异常 异常处理 捕获异常 try/except 与C,java等语言用try/catch来捕获异常相似,Python使用try/except try/except/finally 无论是否有异常都会执行finally下的语句 try/except/else 没有抛出异常时执行else下的语句 代码 try: f = open('data.txt') f.read() print zz print 5/0 except IOError, e

python基础教程_学习笔记10:异常

异常 什么是异常 Python用异常对象来表示异常情况.遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行: >>> 1/0 Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> 1/0 ZeroDivisionError: integer division or modulo by

Python基础教程(第八章 异常)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5428641.html______ Created on Marlowes 在编写程序的时候,程序员通常需要辨别事件的正常过程和异常(非正常)的情况.这类异常事件可能是错误(比如试图除以0),或者是不希望经常发生的事情.为了能够处理这些异常事件,可以在所有可能发生这类事件的地方都使用条件语句(比如让程序检查除法的分母是否为零).但

Python&lt;2&gt;异常基础

在Python中异常通常可以用于各种用途,下面是最常见的几种. <1>错误处理 每当运行时检测到错误,Python的默认异常处理行为将启动(停止程序,打印错误信息).如果不想启动这种默认 行为,就要写try语句捕捉异常并从异常中恢复.当检测到错误是,Python会跳到try处理器,程序在try之后会接着 继续运行. <2>事件通知 发出有效状态的信号 <3>特殊情况处理 很难调整代码去处理的问题 <4>终止行为 <5>非常规流程控制 异常是一种高

萌新向Python数据分析及数据挖掘 第一章 Python基础 第十节 文件和异常

第一章 Python基础 第十节 文件和异常 从文件中读取数据 读取文件.文件路径   1 filename = 'pi_digits.txt' #文件名取个代号 2 #读取整个文件 3 with open(filename) as file_object: 4 contents = file_object.read()# 给内容取个代号 5 print(contents.rstrip()) 6 #逐行读取 7 with open(filename) as file_object: 8 for

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第08章 | 异常

------ 什么是异常:Python用异常对象(exception object)来表示异常情况.如果异常信息未被处理或捕捉. 程序就会用回潄来终止执行 >>> 1/0 Traceback (most recent call last): #Traceback: 一种错误信息 File "<stdin>", line 1, in ? ZeroDivisionError: integer division or modulo by zero 每个异常都是一

python基础16(错误、异常)

一.什么是错误,什么是异常 错误是指在执行代码过程中发生的事件,它中断或干扰代码的正常流程并创建异常对象.当错误中断流程时,该程序将尝试寻找异常处理程序(一段告诉程序如何对错误做出响应的代码),以帮助程序恢复流程.换句话说,错误是一个事件,而异常是该事件创建的对象. 当使用短语“产生异常”时,表示存在问题的方法发生错误,并创建异常对象(包含该错误的信息及发生的时间和位置)来响应该错误.导致出现错误和随后异常的因素包括用户错误.资源失败和编程逻辑失败.这些错误与代码实现特定任务的方法有关,而与该任