精华内容
下载资源
问答
  • Python异常

    万次阅读 2015-12-09 14:04:24
    异常的处理 异常是指程序中的例外,违例情况; 在Python3中,BaseException是所以异常的基类,所以的内置异常都是它的派生类;...Python内的异常使用继承结构创建,可以在异常处理程序中捕获基类异常,也可以捕获子类

    异常的处理

    异常是指程序中的例外,违例情况;
    在Python3中,BaseException是所以异常的基类,所以的内置异常都是它的派生类;
    Exception是除了SystemExit,GeneratorExit和KeyboardInterrupt之外的所有内置异常的基类,用户自定义的异常也要继承它;
    Python内的异常使用继承结构创建,可以在异常处理程序中捕获基类异常,也可以捕获子类异常;

    *StopItertion 当迭代器中没有数据项时触发,由内置函数next()和迭代器的__next__()方法触发
    *ArithmeticError 算法异常基类,包括OverflowError(溢出异常),ZeroDivisionError(零除异常),FloatingPointError(失败的浮点数操作)
    *AssertionError assert语句失败时触发
    *AttributeError 属性引用和属性赋值异常
    *BufferError 缓存异常,当一个缓存相关的操作不能进行时触发
    *EOFError 未见末尾,使用内置函数input()生成,标识到达文件末尾。但是如read()和readline()等大多数I/O操作将返回一个空字符串来表示EOF而不是引发异常
    *ImportError 导入异常,当import语句或者from语句无法在模块中找到相应文件名称时触发
    *LookupError 当使用映射或者序列时,如果键值或者索引无法找到的时候触发——(KeyError和IndexError的基类)
    *MemoryError 内存错误,当操作超出内存范围时触发
    *NameError 名称异常,在局部或者全局空间中无法找到文件名称时触发
    *OSError 当一个系统函数返回一个系统相关的错误时触发
    *ReferenceError 引用异常,当底层的对象呗销毁后访问弱引用是触发
    *RuntimeError 包含其他分类中没有被包括进去的一般错误
    *SyntaxError 语法错误
    *SystemError 编译器的内部错误
    *TypeError 类型异常,当操作或者函数应用到不合适的类型时触发
    *ValueError 值异常,当操作或者函数的类型正确,但是值不正确时触发
    *Warning 警告


    try...except

    try...except语句用于处理问题语句,捕获可能出现的异常;
    try子句中的代码块放置可能出现异常的语句,except子句中的代码块处理异常;
    当异常出现时,python会自动生成1个异常对象,包含异常的具体信息;
    如:
    open("hello.txt","r")
    Traceback (most recent call last):
      File "C:\Users\cs\Desktop\hello.py", line 1, in <module>
        open("hello.txt","r")
    FileNotFoundError: [Errno 2] No such file or directory: 'hello.txt'

    使用try...except语句:
    try:
        open("hello.txt","r") #尝试读取一个不存在的文件,如果出现异常直接跳入except
        print("读文件")
    except FileNotFoundError: #捕捉FileNotFoundError异常
        print("文件不存在")
    except:                   #其他异常情况
        print("程序异常")
    
    输出结果:
    文件不存在

    try:
        result = 10/0
    except ZeroDivisionError:
        print("0不能被整除")
    else:
        print(result)
    
    #如果result表达式为10/2,则异常不会发生,else子句将被执行

    异常嵌套:
    try:
        s = "hello"
        try:
            print(s[0] + s[1])
            print(s[0] - s[1])
        except TypeError:
            print("字符串不支持减法运算")
    except:
        print("异常")
    
    输出结果:
    he
    字符串不支持减法运算
    如果外层try子句中的代码块引发异常,程序直接跳转到外层对应的except子句
    try...except嵌套语句通常用于释放已经创建的系统资源


    try...finally

    无论异常是否发生,finally子句都会被执行;
    所有finally子句通常用于关闭因异常而不能释放的系统资源;
    try中的变量是局部变量;
    try:
        f = open("hello.txt","r")
        try:
            print(f.read(5))
        except:
            print("读取文件错误")
        finally:
            print("释放资源")
            f.close()
    except FileNotFoundError:
        print("文件不存在")
            
    输出结果:
    文件不存在

    使用raise抛出异常

    raise可以显示引发异常,一旦执行了raise语句,raise后面的代码将不能被执行;
    raise语句通常用于抛出自定义异常,因其不再python的控制范围内,不会被python自动抛出
    try:
        s = None
        if s is None:
            print("s是空对象")
            raise NameError
        print(len(s))
    except TypeError:
        print("空对象没有长度")
    
    输出结果:
    s是空对象
    Traceback (most recent call last):
      File "C:\Users\cs\Desktop\hello.py", line 5, in <module>
        raise NameError
    NameError


    自定义异常

    Python运行程序媛自定义异常类型,用于描述Python异常体系中没有涉及的异常情况;
    自定义异常必须继承Exception类,按照命名规范以Error结尾,显示告诉程序媛该类是异常类;
    自定义异常使用raise语句引发

    from __future__ import division
    
    class DivisionException(Exception):
        def __init__(self,x,y):
            Exception.__init__(self,x,y)
            self.x = x
            self.y = y
    
    if __name__ == "__main__":
        try:
            x = 3
            y = 2
            if x%y > 0:
                print(x/y)
                raise DivisionException(x,y) #注释此行DivisionException异常不会触发
        except DivisionException.div:  #div表示DivisionException类的实例对象
            print("DivisionException:x/y = %.2f"%(div.x/div.y))
    
    输出结果:
    1.5
    Traceback (most recent call last):
      File "C:\Users\cs\Desktop\hello.py", line 15, in <module>
        raise DivisionException(x,y) #注释此行DivisionException异常不会触发
    DivisionException: (3, 2)
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "C:\Users\cs\Desktop\hello.py", line 16, in <module>
        except DivisionException.div:  #div表示DivisionException类的实例对象
    AttributeError: type object 'DivisionException' has no attribute 'div'


    assert语句

    assert语句用于检测某个表达式是否为真;
    又称断言语言,即assert认为检测的表达式永远为真;
    t = ("hello",)
    assert len(t) >= 1
    t = ("hello")
    assert len(t) ==1
    
    输出结果:
    Traceback (most recent call last):
      File "C:\Users\cs\Desktop\hello.py", line 4, in <module>
        assert len(t) ==1
    AssertionError



    展开全文
  • Python 异常

    千次阅读 2013-03-15 16:42:32
    当你的程序中出现某些 异常的 状况的时候,异常就发生了。例如,当你想要读某个文件的时候,而那个文件不存在。或者在程序运行的时候,你不小心把它删除了。上述这些情况可以使用异常来处理。 假如你的程序中有一些...

    当你的程序中出现某些 异常的 状况的时候,异常就发生了。例如,当你想要读某个文件的时候,而那个文件不存在。或者在程序运行的时候,你不小心把它删除了。上述这些情况可以使用异常来处理。

    假如你的程序中有一些无效的语句,会怎么样呢?Python会引发并告诉你那里有一个错误,从而处理这样的情况。

    错误

    考虑一个简单的print语句。假如我们把print误拼为Print,注意大写,这样Python会 引发 一个语法错误。

    >>> Print 'Hello World'
        File "<stdin>", line 1
          Print 'Hello World'
                            ^
    SyntaxError: invalid syntax

    >>> print 'Hello World'
    Hello World

    我们可以观察到有一个SyntaxError被引发,并且检测到的错误位置也被打印了出来。这是这个错误的 错误处理器 所做的工作。

    try..except

    我们尝试读取用户的一段输入。按Ctrl-d,看一下会发生什么。

    >>> s = raw_input('Enter something --> ')
    Enter something --> Traceback (most recent call last):
      File "<stdin>", line 1, in ?
    EOFError

    Python引发了一个称为EOFError的错误,这个错误基本上意味着它发现一个不期望的 文件尾 (由Ctrl-d表示)

    接下来,我们将学习如何处理这样的错误。

    处理异常

    我们可以使用try..except语句来处理异常。我们把通常的语句放在try-块中,而把我们的错误处理语句放在except-块中。

    例13.1 处理异常

    #!/usr/bin/python
    # Filename: try_except.py


    import sys

    try:
        s = raw_input('Enter something --> ')
    except EOFError:
        print '\nWhy did you do an EOF on me?'
        sys.exit() # exit the program
    except:
        print '\nSome error/exception occurred.'
        # here, we are not exiting the program

    print 'Done'

    (源文件:code/try_except.py

    输出

    $ python try_except.py
    Enter something -->
    Why did you do an EOF on me?

    $ python try_except.py
    Enter something --> Python is exceptional!
    Done

    它如何工作

    我们把所有可能引发错误的语句放在try块中,然后在except从句/块中处理所有的错误和异常。except从句可以专门处理单一的错误或异常,或者一组包括在圆括号内的错误/异常。如果没有给出错误或异常的名称,它会处理 所有的 错误和异常。对于每个try从句,至少都有一个相关联的except从句。

    如果某个错误或异常没有被处理,默认的Python处理器就会被调用。它会终止程序的运行,并且打印一个消息,我们已经看到了这样的处理。

    你还可以让try..catch块关联上一个else从句。当没有异常发生的时候,else从句将被执行。

    我们还可以得到异常对象,从而获取更多有个这个异常的信息。这会在下一个例子中说明。

    引发异常

    你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个ErrorException类的直接或间接导出类。

    如何引发异常

    例13.2 如何引发异常

    #!/usr/bin/python
    # Filename: raising.py


    class ShortInputException(Exception):
        '''A user-defined exception class.'''
        def __init__(self, length, atleast):
            Exception.__init__(self)
            self.length = length
            self.atleast = atleast


    try:
        s =
    raw_input('Enter something --> ')
        if len(s) < 3:
            raise ShortInputException(
    len(s), 3)
        # Other work can continue as usual here
    except EOFError:
        print '\nWhy did you do an EOF on me?'
    except ShortInputException, x:
        print 'ShortInputException: The input was of length %d, \
              was expecting at least %d'
    % (x.length, x.atleast)
    else:
        print 'No exception was raised.'

    源文件(code/raising.py

    输出

    $ python raising.py
    Enter something -->
    Why did you do an EOF on me?

    $ python raising.py
    Enter something --> ab
    ShortInputException: The input was of length 2, was expecting at least 3

    $ python raising.py
    Enter something --> abc
    No exception was raised.

    它如何工作

    这里,我们创建了我们自己的异常类型,其实我们可以使用任何预定义的异常/错误。这个新的异常类型是ShortInputException类。它有两个域——length是给定输入的长度,atleast则是程序期望的最小长度。

    except从句中,我们提供了错误类和用来表示错误/异常对象的变量。这与函数调用中的形参和实参概念类似。在这个特别的except从句中,我们使用异常对象的lengthatleast域来为用户打印一个恰当的消息。

    try..finally

    假如你在读一个文件的时候,希望在无论异常发生与否的情况下都关闭文件,该怎么做呢?这可以使用finally块来完成。注意,在一个try块下,你可以同时使用except从句和finally块。如果你要同时使用它们的话,需要把一个嵌入另外一个。

    使用finally

    例13.3 使用finally

    #!/usr/bin/python
    # Filename: finally.py


    import time

    try:
        f =
    file('poem.txt')
        while True: # our usual file-reading idiom
            line = f.readline()
            if len(line) == 0:
                break
            time.sleep(2)
            print line,
    finally:
        f.close()

        print 'Cleaning up...closed the file'

    (源文件:code/finally.py

    输出

    $ python finally.py
    Programming is fun
    When the work is done
    Cleaning up...closed the file
    Traceback (most recent call last):
      File "finally.py", line 12, in ?
        time.sleep(2)
    KeyboardInterrupt

    它如何工作

    我们进行通常的读文件工作,但是我有意在每打印一行之前用time.sleep方法暂停2秒钟。这样做的原因是让程序运行得慢一些(Python由于其本质通常运行得很快)。在程序运行的时候,按Ctrl-c中断/取消程序。

    我们可以观察到KeyboardInterrupt异常被触发,程序退出。但是在程序退出之前,finally从句仍然被执行,把文件关闭

    概括

    我们已经讨论了try..excepttry..finally语句的用法。我们还学习了如何创建我们自己的异常类型和如何引发异常。

    接下来,我们将探索Python标准库。



    注:本书是《Python简明教程》

    展开全文
  • python异常处理

    万次阅读 2020-07-13 04:20:08
    try方法实现python异常处理

    方式一

        try:
            #运行可能产生异常的代码
            except#如果try后面的代码运行错误则运行这部分代码
    

    方式二

        try:
        #运行可能产生异常的代码
        except#如果try后面的代码运行错误则运行这部分代码              
        else#如果没有异常发生 
    

    没有异常处理的程序

    以爬取王者荣耀图片为例子

    import urllib.request
    import os
    # http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/191/191-bigskin-1.jpg 王者荣耀图床地址   文件夹191~529 -1表示皮肤 ,之后是-2 、-3...
    for num in range(105,600):
        # try:
            path = r'D:\文档\code\web前端\王者荣耀图库\皮肤\ '
            # os.mkdir(path + str(num))         #创建文件夹
            response = urllib.request.urlopen("http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/"+str(num)+"/"+str(num)+"-bigskin-1"+".jpg")  #图片地址
            print(response)
            wangzhe_img = response.read()
            with open('D:\文档\code\web前端\王者荣耀图库\皮肤\ '+ str(num) + '.jpg','wb') as f:
                f.write(wangzhe_img)
        # except:
        #     continue
    

    有异常处理的程序

    按照上述方式爬取图片,会遇到当网址无法打开则无法进行下一步的问题(王者荣耀图片网站并不是191~529都有图片,有些英雄之间的编号可能有间隔,因而运行程序遇到这种情况会出现error)

    为解决该问题,使用try异常处理,当遇到无法打开的网址时,直接跳过继续循环的下一个步骤,如:

    import urllib.request
    import os
    # http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/191/191-bigskin-1.jpg 王者荣耀图床地址   文件夹191~529 -1表示皮肤 ,之后是-2 、-3...
    for num in range(105,600):
        try:
            path = r'D:\文档\code\web前端\王者荣耀图库\皮肤\ '
            # os.mkdir(path + str(num))         #创建文件夹
            response = urllib.request.urlopen("http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/"+str(num)+"/"+str(num)+"-bigskin-1"+".jpg")  #图片地址
            print(response)
            wangzhe_img = response.read()
            with open('D:\文档\code\web前端\王者荣耀图库\皮肤\ '+ str(num) + '.jpg','wb') as f:
                f.write(wangzhe_img)
        except:
            continue
    
    展开全文
  • python 异常

    千次阅读 2013-07-16 16:26:15
    第一:基于类的异常 class General: pass class Specific(General): pass raise Specific()自定义异常类最好继承Exception内置异常类,但这并不是必须的。继承内置异常类,可以让自定义异常类获得一些 免费的有用...

    第一:基于类的异常

    class General:
        pass
    class Specific(General):
        pass
    
    raise Specific()
    自定义异常类最好继承Exception内置异常类,但这并不是必须的。继承内置异常类,可以让自定义异常类获得一些

    免费的有用的接口和工具。

    class MyException(Exception):
        pass
    class Specific(MyException):
        pass

    第二:定义异常文本

    class MyException:
        pass
    
    raise MyException
    输出:

      File "test.py", line 4, in <module>
        raise MyException
    __main__.MyException: <__main__.MyException instance at 0x7f1d90714638>
    显示并不是很友好,可以自定义显示信息。

    class MyException:
        def __str__(self):
            return "my-fault"
    
    raise MyException
    输出:

      File "test.py", line 5, in <module>
        raise MyException
    __main__.MyException: my-fault
    通过__str__可以实现自定义异常文本


    如果继承于内置异常类Exception,则构造方法的参数会自动存储并显示在异常消息中。

    class MyException(Exception):
        pass
    
    raise MyException('a', 'b')
    输出:

    Traceback (most recent call last):
      File "test.py", line 4, in <module>
        raise MyException('a', 'b')
    __main__.MyException: ('a', 'b')
    同样,如果不喜欢这个默认输出信息,可以重新__str__方法来实现自定义显示。


    第三:发送额外数据

    class MyException(Exception):
        def __init__(self, file):
            self.file = file
    
    def catcher():
        try:
            raise MyException("my-file")
        except MyException, X:
            print X.file
    
    catcher()

    展开全文
  • Python异常 TypeError

    千次阅读 2019-03-20 19:32:36
    Python异常 TypeError抛出场景和规避方法介绍。
  • Python异常处理

    2017-11-04 16:45:31
    Python异常处理
  • Python 异常处理

    千次阅读 2021-01-15 15:01:37
    Python异常处理 在Python中存在着两种错误:语法错误、逻辑错误 语法错误在写程序的必不能犯的。因为只要写出了语法错误,整个程序就无法运行。这Python的规定 而逻辑错误,则是我们平常编写代码的过程中产生的,...
  • Python异常习题

    千次阅读 2016-07-29 08:28:28
    Python异常习题
  • Python异常处理 -跳过异常继续执行

    万次阅读 多人点赞 2019-02-19 15:01:48
    Python异常处理 -跳过异常继续执行 python一般使用try…except…处理异常 try: #可能会出现异常的代码,放在try下 code1 #如何try内部任意一行代码出现异常,# 直接跳转至except,执行except下代码 code2 except: ...
  • python异常 详解

    2016-10-27 10:45:26
    python异常处理 自定义异常 手动触发异常
  • 2.2 Python异常处理

    万次阅读 2019-05-21 10:38:50
    2.2 Python异常处理 2.2.1 异常介绍: 即便Python程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。 大多数的异常都不会被程序处理,都以错误信息的形式展现在这里: &...
  • python异常处理&异常基类学习
  • Python异常处理和C++异常处理 Python异常处理 什么是异常? 异常即一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。 一般情况下,在Python无法正常处理程序时就会发生一个异常。 异常是Python对象,...
  • Python异常处理和异常类型

    万次阅读 2015-09-21 18:58:26
    Python异常处理和异常类型目录 Python异常处理和异常类型 目录 python2x捕获异常语法 python3x捕获异常语法 python常见的异常类型 NameError尝试访问一个未申明的变量 ZeroDivisionError除数为0 SyntaxError语法错误...
  • python异常打印堆栈

    2020-07-20 19:17:50
    1 python异常打印堆栈 python调试中难免要捕获异常,并捕捉异常信息,使用 print(e) ,无法得到调用堆栈,不利于问题定位,这里列出python的异常打印方法,记住方便后续调试问题。 import traceback def fun(a,b): ...
  • Python异常处理机制

    千次阅读 2017-02-28 21:43:21
    Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。 异常处理 断言(Assertions) python标准异常 异常名称 描述 ...
  • Python异常捕获及自定义异常类

    千次阅读 2019-05-14 00:00:45
    Python异常捕获及自定义异常类 一、什么是异常? 异常是一个与业务逻辑无关的BUG,一个潜在错误或者网络错误事件等,如:尚未实现的函数,缩进错误,Python语法错误等.该事件可能会在程序执行过程中发生,影响程序的...
  • 摘要:作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,本文专门介绍 python 异常处理。 异常 广义上的错误分为错误和异常 错误指的是可以人为避免 异常是指在语法逻辑正确的而前提下,...
  • Python异常 ValueError

    万次阅读 2019-03-04 17:08:57
    Python ValueError异常抛出场景和规避方法介绍。
  • Python异常处理(基础详解)

    千次阅读 多人点赞 2020-04-06 13:52:05
    本文是python异常的基础知识,欢迎阅读,一起进步 Python专栏请参考:人生苦短-我学python 文章目录一.异常简介二.捕获异常三.异常的传递四.抛出自定义的异常五.模块六.模块制作七.python中的包 一.异常简介 ...
  • Python异常处理总结

    2015-01-13 22:47:28
    Python异常处理总结 这篇文章主要介绍了Python异常处理总结,需要的朋友可以参考下 本文较为详细的罗列了Python常见的异常处理,供大家参考,具体如下: 1. 抛出异常和自定义异常 Python用异常对象(exception...
  • Python异常的处理和检测 捕获异常 在Python程序执行过程中发生的异常可以通过try语句来检测,可以把需要检测的语句放置在try块里面,try块里面的语句发生的异常都会被try语句检测到,并抛出异常给Python解释器,...
  • Python异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员。所有异常都从基类Exception继承,而且都在exceptions模块中定义。Python...
  • Python异常编码处理

    2017-10-31 00:12:34
    Python异常编码处理1.主动触发异常 raiseraise TypeError raise TypeError,'Error Message' #添加错误提示 asserta = 1 assert a > 0 assert a > 0,"a must lg 0" #添加错误提示 2.处理特定异常 try/excepttry: int...
  • 这篇文章主要介绍了Python异常继承关系和自定义异常实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 主要介绍 python 中异常的继承关系,及如何...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,862
精华内容 18,744
关键字:

python异常

python 订阅