Python Try Catch异常教程

作为开发人员,我们对应用程序和特性有很多想法。实现它们是一项乏味的任务。在执行过程中,我们可能会犯错误。这些错误可能与应用程序逻辑或技术有关。这些错误会引起问题 当应用程序运行时。我们把这类问题称为例外。我们不能阻止所有的异常,但我们可以创建一些机制来处理这些情况。在本教程中,我们将研究如何处理这些异常。

null

什么是例外

我们中的一些人可能熟悉例外情况,但也可能有其他人对例外情况一无所知。异常是应用程序通常停止工作的意外错误情况。有时它不会停止工作,但也不会正常工作。

下面是一个异常如何发生的示例。我们的应用程序从用户和多个给定的数字获得输入。但如果用户输入字符串,则会出现异常。文件名为 myapp.py .

#!/usr/bin/python3  num1 = input ("Enter number")  print(num1*num1)

当我们通过提供一个类似于other的字符来调用下面这样的应用程序时 a 然后一个数字我们会得到一个例外。

$ python3 myapp.py
What is An Exception
什么是例外

我们还得到了异常类型。Python为不同的情况提供了不同类型的异常。在此代码中,异常类型为 TypeError .

异常类型

因为有很多不同的库和函数,所以存在不同类型的异常。这里有一些最受欢迎的。

  • Exception 是所有异常的泛型和基类。
  • StopIteration 迭代器的next()方法未指向任何对象时引发的异常。
  • SystemExit sys.exit()函数引发的异常。
  • StandardError 是除StopIteration和SystemExit之外的所有内置异常的基类和异常。
  • ArithmeticError 是数学和算术计算以及运算符期间发生的所有错误的基类。
  • OverFlowError 当计算超过给定数值类型的最大限制时引发异常。
  • ZeroDivisionError 数值运算中发生零除或模除时引发的异常。
  • AssertionError 在assert Python编程语言语句失败时引发。
  • AttributeError 属性引用或赋值失败时引发的异常。
  • EOFError 没有输入或到达文件结尾时引发异常。
  • ImportError 导入Python编程语言语句失败时引发的异常。
  • KeyboardInterrupt 当用户使用Linux kill命令或按CTRL+C键盘快捷键中断应用程序的执行时引发的异常。
  • LookupError 为所有查找错误引发异常。
  • IndexError 在数组中找不到索引时引发异常,请按顺序列出。
  • KeyError 在字典中找不到指定键时引发异常。
  • NameError 在本地或全局命名空间中找不到标识符时引发异常。
  • UnboundLocalError 尝试访问函数、方法、模块中的局部变量但尚未为其赋值时引发异常。
  • EnvironmentError 是Python环境之外发生的所有异常的基于类。
  • IOError 输入/输出操作失败时引发的异常,例如写入文件失败或无法打开文件。
  • SyntaxError 出现与Python语法相关的错误时引发的异常。
  • IndentationError 未指定缩进并正确用于捕获代码块时引发的异常。
  • SystemError Python解释器发现和时引发异常,内部问题。
  • TypeError 尝试获取、设置不同类型的变量或数据类型的操作、函数或方法时引发异常。
  • ValueError 数据类型的内置函数具有有效的参数类型,但参数具有无效值时引发异常。
  • RuntimeError 当引发的异常或错误不适合任何特定类别时引发的异常。
  • NotImplementedError 尝试使用未实现的抽象方法时引发异常。

相关文章: Java中的空指针异常是什么?如何修复?

接住 Try和Except的异常

现在我们要以编程的方式防止这种类型的bug和异常。Python提供了一种机制 try 用于检测给定代码块中的异常。我们将把潜在的错误块放入 try 在下面。我们猜是这条线 print(num1-num1) 可能引发异常。

#!/usr/bin/python3  num1 = input ("Enter number")  try:    print(num1*num1)  except:    print("An error occured")      print("Operation completed")

当我们通过提供这样的角色来运行时 a 不会引发异常。它只是跳转到代码 except 在引发异常时将运行的块。然后应用程序将在正常情况下流动。

Handle An Exception with Try and Except
使用Try和Except处理异常

捕捉特定 例外情况

在上一个示例中,我们使用代码触发了一种类型的异常 except 阻止。但是我们可以捕获特定类型的异常并忽略其他异常。我们记得第一个例子中有一个例外 TypeError . 如果我们只需要捕捉一个异常 TypeError 忽略我们将指定的其他人 TypeError 诸如此类 except 在下面。

#!/usr/bin/python3  num1 = input ("Enter number")  try:    print(num1*num1)  except TypeError:    print("An TypeError occurred")   print("Operation completed")
Catching Specific Exceptions
捕捉特定 例外情况

否则,如果没有引发异常

我们通常希望在运行关键代码时引发一些异常。但在某些情况下,不会有错误或例外。如果没有错误和异常,我们可以定义一些代码来执行 else 关键字。如果else关键字块中没有错误或异常,我们将放入要运行的代码。在本例中,如果没有错误或异常,我们将打印屏幕“没有异常”。

#!/usr/bin/python3 num1 = input ("Enter number") try:   print(num1*num1) except TypeError:      print("An TypeError occurred") else:    print("There is no exception")print("Operation completed")

捕获多个类型异常

我们可能需要在一个数据库中捕获多个异常 except 代码块。我们将通过使用命令分隔异常类型来提供括号中的异常类型 (TypeA , TypeB , TypeC , ...)

在这个例子中,我们将同时抓住这两个问题 TypeError ZeroDivisionError .

#!/usr/bin/python3  num1 = input ("Enter number")  try:    print(num1*num1)  except (TypeError,ZeroDivisionError):    print("An TypeError occured")   print("Operation completed")

使用Finally在异常后运行代码

在签入异常时 try 我们可能需要执行一些代码块,不管发生什么 try 代码块 工作或除外 代码块工作。我们将最终使用 代码块来完成 try-except 阻碍。试过之后除了 最后一个街区, 将运行代码块。这通常用于释放中使用的文件、数据库连接或还原操作等资源 try 代码块。

相关文章: Dpkg错误“Dpkg被中断”及解决方法

在本例中,我们将关闭 finally 代码块以前的代码块是否工作或引发异常。

#!/usr/bin/python3  try:    f = open("personels.txt")    f.read()  finally:    f.close()

引发异常

到目前为止,我们已经处理了自筹资金 例外情况。我们还可以在不等待用户输入任何更改的情况下手动引发异常。我们将使用关键字 raise 以手动引发异常。在这个例子中,我们将提高类型 ZerrorDivisionError 例外。

#!/usr/bin/python3  try:    print("0/0")    raise ZeroDivisionError  except (ZeroDivisionError):    print("An ZeroDivisionError occurred")   print("Operation completed")
Raise Exception
引发异常

用户定义的异常

在编写企业应用程序和库时,我们还需要创建异常类型库。我们可能需要提供操作异常,如文件的无效移动操作。我们可以使用类定义自己的用户定义异常 RuntimeError 就像下面一样。我们将把以下代码放入 CorpExceptions.py

#!/usr/bin/python3  class InvalidMove(RuntimeError):    def __init__(self, arg):       self.args = arg

我们可以在进口后像以前一样筹集资金 CorpExceptions.py

raise InvalidMode

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享