zoukankan      html  css  js  c++  java
  • python 异常捕捉

    python中捕捉异常常用句式try...except.

     

    try 语句按照如下方式工作;

    • 首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。

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

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

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

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

    处理程序将只针对对应的 try 子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。

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

    except (RuntimeError, TypeError, NameError):    pass

    接下来我们来写一个具体的demo来看一下:

    try:    
      print(a)
    except NameError as e:
    print(e) 
    >>>name 'a' is not defined

    以上程序可看到try中执行一个未定义的变量,运行报错,报错信息则被下面except给接住了,并输出了具体的错误信息,错误的类型则为NameError 。

    若我们将错误类型修改一下,情况如下示例:

    try:
    print(a)
    except IOError as e:
    print(e)

    会发现执行以上程序仍就报错了,这是因为错误类型本该是NameError ,我们却用IOError 进行接收,发现报错与except中不匹配,则仍旧执行了try中的程序。如果我们在执行时不清楚具体的错误类型,可以用异常的基类,

    BaseException或者我们常用的错误类型集合Exception。

    try:
    fh = open("testfiles", "r")
    print(fh.readlines())
    except BaseException as e:
    print(e)  
    >>>[Errno 2] No such file or directory: 'testfiles'

    try...except...else...

    else后面是如果程序执行没有异常的话,则需要在执行一次else里面的内容,若存在异常,则不会执行else里面的内容。

    try:
    print('执行程序')
    except Exception as e:
    print('异常信息是:'+str(e))
    else:
    print('没有异常')

    >>>执行程序>>>没有异常 

    try...finally...

    finally后面是无论以上程序有没有异常报错,都会执行finally里面的内容,起到一个兜底的作用。

    try:
    print(abc)
    except Exception as e:
    print('异常信息是:'+str(e))
    else:
    print('没有异常')
    finally:
    print('以上程序执行完毕')

    >>>异常信息是:name 'abc' is not defined

    >>>以上程序执行完毕  

    raise Exception

    抛出异常,rasise是我们手动去抛出的一些异常,可能有些业务规则不满足我们的需求,程序又没有语法实质性的错误,所以我们可以自定义抛出错误。

    a = 10
    if a>5:
    raise Exception('a不能超过5')

    >>> Traceback (most recent call last):>>> File "E:/Python/selenium/Learn/pythonFirst/firstApi.py", line 45, in <module>>>> raise Exception('a不能超过5')>>>Exception: a不能超过5

    还有一些时候我们捕捉到了异常,并不想对其进行处理,想再次把它抛出去,我们还可以这样写:

    try:
    print(a)
    except NameError:
    print('代码执行中.......')
    raise
    >>>代码执行中.......>>>Traceback (most recent call last):>>> File "E:/Python/selenium/Learn/pythonFirst/firstApi.py", line 38, in <module>>>> print(a)>>>NameError: name 'a' is not defined

    以上可看到程序捕捉到了NameError,然后再次将其抛了出去。

  • 相关阅读:
    Hadoop与hbase单机环境安装
    Hive集成Hbase
    正确搭建hbase完全分布式集群(二)
    正确搭建hbase完全分布式集群(一)
    zookeeper 及 独立hbase 的安装与配置
    sqoop安装及导入sqlserver数据
    hadoop+hive+sqoop安装笔记
    如何正确安装mysql 8
    安装nginx为windows服务
    python web编程之django post请求
  • 原文地址:https://www.cnblogs.com/lexus168/p/13630484.html
Copyright © 2011-2022 走看看