【python语法】异常简要说明

异常的基础

我们使用 try...except 块来处理任意异常。基本的语法像这样:

try:
    statements to be inside try clause
    statement2
    statement3
    ...
except ExceptionName:
    statements to evaluated in case of ExceptionName happens

它以如下方式工作:

  • 首先,执行 try 子句 (在 tryexcept 关键字之间的部分)。

  • 如果没有异常发生,except 子句 在 try 语句执行完毕后就被忽略了。

  • 如果在 try 子句执行过程中发生了异常,那么该子句其余的部分就会被忽略。

    如果异常匹配于 except 关键字后面指定的异常类型,就执行对应的 except 子句。然后继续执行 try 语句之后的代码。

  • 如果发生了一个异常,在 except 子句中没有与之匹配的分支,它就会传递到上一级 try 语句中。

    如果最终仍找不到对应的处理语句,它就成为一个 未处理异常,终止程序运行,显示提示信息。

    ValueError 的简单案例:

    >>> def get_number():
    ...     number = float(input("Enter a float number"))      # 获取用户输入的浮点数
    ...     return number
    ...
    >>> while True:
    ...      try:
    ...           print(get_number())
    ...      except ValueError:
    ...           print("You entered a wrong number")
    ...
    Enter a float number22.333
    22.333
    Enter a float number11
    11.0
    Enter a float numberlll
    You entered a wrong number
    Enter a float number
    

    抛出一个异常:raise

    >>> raise ValueError("A ValueError happend")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: A ValueError happend
    

    try 语句还有另一个可选的 finally 子句,目的在于定义在任何情况下都一定要执行的功能。例如:

    >>> try:
    ...     raise KeyboardInterrupt
    ... finally:
    ...     print("Goodbye world")
    ...
    Goodbye world
    Traceback (most recent call last):
      File "<stdin>", line 2, in <module>
    KeyboardInterrupt
    

    异常与函数

    通过一个 python 脚本,让用户输入的分钟数转换成小时数,其中用户输入的数据要使用 sys.argv[]的方式获取

    import sys
    
    # 转换函数
    def Hours(minute):
        # 如果为负数则 raise 异常
        if minute < 0:
            raise ValueError("Input number cannot be negative")
        else:
            print("{} H, {} M".format(int(minute / 60), minute % 60))
    
    # 函数调用及异常处理逻辑
    try:
        Hours(int(sys.argv[1]))
    except:
        print("Parameter Error")
    

猜你喜欢

转载自blog.csdn.net/weixin_45895022/article/details/106174534