• Python 异常处理


    Python异常

    Python3的捕获异常语法

    try:
    	# 未声明的变量
        print(x)
    except Exception as e:
        print(e)
    

    Python常见异常和错误

    1. NameError:尝试访问一个未申明的变量
    print(v)
    NameError: name 'v' is not defined
    
    1. ZeroDivisionError:除数为0
    print(1/0)
    ZeroDivisionError: int division or modulo by zero
    
    1. SyntaxError:语法错误
    print(,)
    File "test.py", line 201
        print(,)
              ^
    SyntaxError: invalid syntax
    
    1. IndexError:索引超出范围
    List = [2]
    print(List[3])
    Traceback (most recent call last):
      File "<pyshell#18>", line 1, in <module>
        List[3]
    IndexError: list index out of range
    
    1. KeyError:字典关键字不存在
    Dic = {'1':'yes', '2':'no'}
    print(Dic['3'])
    Traceback (most recent call last):
      File "<pyshell#20>", line 1, in <module>
        Dic['3']
    KeyError: '3'
    
    1. IOError:输入输出错误
    f = open('abc')
    IOError: [Errno 2] No such file or directory: 'abc'
    
    1. AttributeError:访问未知对象属性
    class Worker:
    	def Work():
    		print("I am working")
    
    w = Worker()
    w.a
    Traceback (most recent call last):
      File "<pyshell#51>", line 1, in <module>
        w.a
    AttributeError: 'Worker' object has no attribute 'a'
    
    1. ValueError:数值错误
    int('d')
    Traceback (most recent call last):
      File "<pyshell#54>", line 1, in <module>
        int('d')
    ValueError: invalid literal for int() with base 10: 'd'
    
    1. TypeError:类型错误
    iStr = '22'
    iVal = 22
    obj = iStr + iVal;
    Traceback (most recent call last):
      File "<pyshell#68>", line 1, in <module>
        obj = iStr + iVal;
    TypeError: Can't convert 'int' object to str implicitly
    

    Python异常处理基本原则

    (1)执行try子句(在关键字try和关键字except之间的语句)

    (2)如果没有异常发生,忽略except子句,try子句执行后结束。

    (3)如果在执行try子句的过程中发生了异常,那么try子句剩下的部分将被忽略。如果异常的类型和except之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。

    try:
        print(x)
    # 产生的异常类型和捕获的异常类型相符
    except NameError as e:
    	print(1)
    	print(e)
    

    (4)如果异常没有与任何except匹配,那么这个异常将会传递给上层的try中。

    try:
        try:
            print(x)
        # 产生的异常和捕获异常的类型不符,则异常传递给上层try
        except IndexError as e:
            print(1)
            print(e)
    except Exception as ee:
        print(2)
        print(ee)
    

    (5)一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。

    try:
        print(x)
    except IndexError as e1:
        print(1)
        print(e1)
    except NameError as e2:
        print(2)
        print(e2)
    

    (6)一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。

    try:
        print(x)
    except (IndexError, NameError) as e:
        print(e)
    

    (7)最后一个except子句可以忽略异常的名称,它将被当作通配符使用。你可以使用这种方法打印一个错误信息。

    try:
        print(x)
    except:
        print('您遇到了错误')
    

    (8)try except语句还有一个可选的else子句,如果使用这个子句,那么必须放在所有的except子句之后。这个子句将在try子句没有发生任何异常的时候执行。

    try:
        print(x)
    except:
        print('您遇到了错误')
    else:
        print('前面没有发生任何错误')
    

    (9)异常处理并不仅仅处理那些直接发生在try子句中的异常,而且还能处理子句中调用的函数(甚至间接调用的函数)里抛出的异常。

    def this_fails():
        x = 1 / 0
    
    try:
        this_fails()
    except ZeroDivisionError as err:
        print('0不能作为除数', err)
    

    (10)try……finally 语句,无论是否发生异常,都会执行finally块的代码

    try:
        print(11)
    except:
        pass
    finally:
        print('hh')
    

    抛出异常(主动触发异常)

    之所以我们能捕获异常,那是因为代码执行的时候,系统给我们抛出了异常。其实我们也可以手动自行抛出异常。

    def xx():
        raise Exception('错误', 1111)
    
    
    try:
        xx()
    except Exception as e:
        print(e)
    
  • 相关阅读:
    使用 Vim 搭建 JavaScript 开发环境
    SpaceVim 语言模块 erlang
    SpaceVim 语言模块 lua
    SpaceVim 语言模块 python
    SpaceVim 语言模块 elixir
    SpaceVim 语言模块 dart
    SpaceVim 语言模块 elm
    如何配置 SpaceVim
    彻底理解浏览器缓存机制
    react-创建react元素
  • 原文地址:https://www.cnblogs.com/imxiaoqi/p/10492144.html
Copyright © 2020-2023  润新知