在Python中捕捉异常

Python中捕捉异常

Python中,可以使用try语句处理异常。

可能引发异常的关键操作放在try子句中,并且将处理异常的代码编写在except子句中。

捕获异常后,我们将执行什么操作取决于我们自己。这是一个简单的例子。

# import module sys to get the type of exception

import sys

 

randomList = ['a', 0, 2]

 

for entry in randomList:

    try:

        print("The entry is", entry)

        r = 1/int(entry)

        break

    except:

        print("Oops!",sys.exc_info()[0],"occured.")

        print("Next entry.")

        print()

print("The reciprocal of",entry,"is",r)

 

输出量

The entry is a

Oops! <class 'ValueError'> occured.

Next entry.

 

The entry is 0

Oops! <class 'ZeroDivisionError' > occured.

Next entry.

 

The entry is 2

The reciprocal of 2 is 0.5

在此程序中,我们循环执行,直到用户输入具有有效倒数的整数。可能导致异常的部分放在try块中。

如果没有异常发生,则跳过除块以外的内容,并继续正常流程。但是,如果发生任何异常,它将被except块捕获。

在这里,我们使用模块ex_info()内部的函数打印异常的名称,sys并要求用户重试。我们可以看到,值“ a”“ 1.3”导致ValueError,而值“ 0”导致ZeroDivisionError


捕获Python中的特定异常

在上面的示例中,我们在except子句中未提及任何异常。

这不是一个好的编程习惯,因为它将捕获所有异常并以相同的方式处理每种情况。我们可以指定except子句会捕获哪些异常。

一个try子句可以具有任意数量的except子句以不同方式处理它们,但万一发生异常,则只会执行一个。

我们可以使用值的元组在except子句中指定多个异常。这是示例伪代码。

  1. try:
  2.    # do something
  3.    pass
  4.  
  5. except ValueError:
  6.    # handle ValueError exception
  7.    pass
  8.  
  9. except (TypeError, ZeroDivisionError):
  10.    # handle multiple exceptions
  11.    # TypeError and ZeroDivisionError
  12.    pass
  13.  
  14. except:
  15.    # handle all other exceptions
  16.    pass

引发异常

Python编程中,在运行时发生相应的错误时会引发异常,但是我们可以使用关键字raise强制引发它。

我们还可以选择将值传递给异常,以阐明引发该异常的原因。

  1. >>> raise KeyboardInterrupt
  2. Traceback (most recent call last):
  3. ...
  4. KeyboardInterrupt
  5.  
  6. >>> raise MemoryError("This is an argument")
  7. Traceback (most recent call last):
  8. ...
  9. MemoryError: This is an argument
  10.  
  11. >>> try:
  12. ...     a = int(input("Enter a positive integer: "))
  13. ...     if a <= 0:
  14. ...         raise ValueError("That is not a positive number!")
  15. ... except ValueError as ve:
  16. ...     print(ve)
  17. ...   
  18. Enter a positive integer: -2
  19. That is not a positive number!

尝试...最后

Python中的try语句可以具有可选finally子句。该子句无论如何执行,通常用于释放外部资源。

例如,我们可能通过网络或使用文件或使用图形用户界面(GUI)连接到远程数据中心。

在所有这些情况下,无论资源是否成功,我们都必须清除该资源。这些操作(关闭文件,GUI或与网络断开连接)在finally子句中执行,以确保执行。

这是一个文件操作的例子来说明这一点。

  1. try:
  2.    f = open("test.txt",encoding = 'utf-8')
  3.    # perform file operations
  4. finally:
  5.    f.close()

这种类型的构造可确保即使发生异常也关闭文件。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值