task03异常处理

task03异常处理

在这里插入图片描述

try/expect

while True:

    try:

        x = int(input("请输入一个数字: "))

        break

    except ValueError:

        print("您输入的不是数字,请再次尝试输入!") 
 '''
 try 语句按照如下方式工作
首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。
如果没有异常发生,忽略 except 子句,try 子句执行后结束。
如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。
如果一个异常没有与任何的 except  匹配,那么这个异常将会传递给上层的 try 中。
'''

一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
处理程序将只针对对应的 try 子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组

import sys



try:

    f = open('myfile.txt')

    s = f.readline()

    i = int(s.strip())

except OSError as err:

    print("OS error: {0}".format(err))

except ValueError:

    print("Could not convert data to an integer.")

except:

    print("Unexpected error:", sys.exc_info()[0])

    raise

try/expect/else

for arg in sys.argv[1:]:

    try:

        f = open(arg, 'r')

    except IOError:

        print('cannot open', arg)

    else:

        print(arg, 'has', len(f.readlines()), 'lines')

        f.close()
#使用 else 子句比把所有的语句都放在 try 子句里面要好,这样可以避免一些意想不到,而 except 又无法捕获的异常。
#异常处理并不仅仅处理那些直接发生在 try 子句中的异常,而且还能处理子句中调用的函数(甚至间接调用的函数)里抛出的异常。
>>> def this_fails():

        x = 1/0

   

>>> try:

        this_fails()

    except ZeroDivisionError as err:

        print('Handling run-time error:', err)

   

Handling run-time error: int division or modulo by zero

自定义清理

>>> try:

...     raise KeyboardInterrupt

... finally:

...     print('Goodbye, world!')

... 

Goodbye, world!

Traceback (most recent call last):

  File "<stdin>", line 2, in <module>

KeyboardInterrupt
#以上例子不管 try 子句里面有没有发生异常,finally 子句都会执行。

#如果一个异常在 try 子句里(或者在 except 和 else 子句里)被抛出,而又没有任何的 except 把它截住,那么这个异常会在 finally 子句执行后被抛出。
>>> def divide(x, y):

        try:

            result = x / y

        except ZeroDivisionError:

            print("division by zero!")

        else:

            print("result is", result)

        finally:

            print("executing finally clause")

   

>>> divide(2, 1)

result is 2.0

executing finally clause

>>> divide(2, 0)

division by zero!

executing finally clause

>>> divide("2", "1")

executing finally clause

Traceback (most recent call last):

  File "<stdin>", line 1, in ?

  File "<stdin>", line 3, in divide

TypeError: unsupported operand type(s) for /: 'str' and 'str'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值