尝试和以外行的方式除外
#python #errors #backenddevelopment

在尼日利亚的当地列表中,我们说诸如“编码甜但na错误杀死Am”之类的东西,这意味着编码很有趣,但错误是它的撤消...

什么是没有错误的软件工程?因此,您正在从事的任何项目中都会发生错误。无论您的专业水平如何,有时会有错误会使您谦虚并屈服于您的膝盖;这就是为什么我们有一个称为错误处理的概念。

在Python中,有三种主要类型的错误。作为开发人员,您要么遇到语法错误,运行时错误或逻辑错误。了解这三种主要类型的错误将帮助您更快地调试错误

语法错误
每当您看到语法错误blablabla时。...只需知道您违反了Python中的规则即可。例如 -

def helloworld()
    print("Hello World")

helloworld()

`
上面的代码将引发语法错误,因为您忘了在定义helloworld函数的同时放置双重结肠。因此,您是打破Python语法规则的人。

运行时错误
此错误发生在您的逻辑为“ wack”时,您没有打破任何语法规则,但是逻辑是不正确的,例如 - 在python或编程中,您不能将任何数字除以零,如果这样做,它将抛出所谓的东西ZerodivisionError。
<

num = 10/0
print(num)

`

在编程中,您无法执行以上操作,此逻辑是不可接受的,因此它将抛出属于运行时错误的ZerodivisionError。

其他运行时错误的示例如下:

  • typeError :当您尝试在错误的数据类型上执行某个操作

`

 username = "codechief"
  usernameGroup = username + 2
  print(username)

`
以上代码段将抛出typeError,因为可变用户名是字符串,而您要执行的操作(用户名 + 2)仅在整数上执行。

  • indexError 当您尝试访问虚构索引时,将发生,即列表包含5个元素,但是您正在尝试访问第七元素的索引...这将永远不会飞行。

`

 gender = ["boy", 'girl'] 
  singleGender = gender[4]
  print(single-gender)

`
以上代码段将丢弃错误,我们列表项目的长度为2,但是您正在尝试访问第四元素。

  • keyError :尝试访问不存在的字典键时会发生。

`

car_color = {"volovo": "red"}
  singleCarColor = car_color['jeep']
  print(singleCarColor)

`
上面的代码段将抛出键盘,因为吉普车在car_color dictionary

中不存在
  • name error :在使用变量或名称而未定义时会出现。

`

 def fullname():
      print(lastname)

`
以上代码段将抛出名称eRROR,因为在打印出来之前未定义或分配任何值。

  • filenotfounderror :试图打开不存在的文件时会发生这种情况。

逻辑错误
这些错误也称为语义错误,不会导致程序崩溃或引起任何错误,您不仅会得到所需的结果。逻辑错误是由有缺陷的程序逻辑引起的;您需要细致地调试和修复这些错误,因为它不会显示任何错误消息,但是您的程序只会拒绝按预期行事。

现在我们了解了我们遇到的主要错误类型。让我们看一下我们可以处理其中一些错误的方式之一。

尝试并使用块来捕获和处理在执行代码块期间可能发生的错误。

这是什么意思?您会期待一些错误。即,您知道该特定代码丢弃错误的可能性,因此您使用尝试和块来捕获错误。

`

import urllib.request

def network(): 
    response = urllib.request.urlopen('http://www.google.com', timeout=1)
    return "You are online."

network()
if __name__ == "__main__":
    result = network()
    print(result)

`
上面的代码定义了一个名为网络的函数,该函数通过尝试打开与Google网站的连接(http://www.google.com)来检查您的Internet连接是否可用。

如果您连接到Internet,它将返回“您在线”,但是如果您离线或尝试推迟互联网连接时;如下所示,它生成了这卡车的错误 -

Image description
现在,让我们介绍尝试,除了块外,除了相同的代码

`

import urllib.request
def network():
    try:
        response = urllib.request.urlopen('http://www.google.com', timeout=1)
        return "You are online"
    except Exception as e:
        return "error: {}".format(e)

network()
if __name__ == "__main__":
    result = network()
    print(result)

`
断开您的互联网,您将获得此错误 -

Image description
在第一个错误和第二个错误之间,您可以同意我的同意,第二个错误看起来不那么令人生畏,也不那么艰巨。但这不是收获。尝试和块除外非常有帮助,因为您可以根据需要自定义错误。您可以使用尝试和块除外,设计自己的错误消息,该消息短,清晰且简洁。

因此,而不是遇到此错误:这无助于任何人或指向错误的来源。您可以将其自定义为“您是离线”或您选择的任何消息。

看一下:

`

import urllib.request
def network():
    try:
        response = urllib.request.urlopen('http://www.google.com', timeout=1)
        return "You are online"
    except Exception as e:
        return "You are offline"

network()
if __name__ == "__main__":
    result = network()
    print(result)

`

当您在互联网断开连接时运行上述代码行时,您会收到由您设计的更友好的错误消息。

Image description
我希望您可以看到使用尝试和块何时与块之间的区别。

使用尝试和块除外的一些优点如下:

程序鲁棒性:尝试和除块除外,您的程序在视线或遇到错误时突然停止了程序。它优雅地处理错误。它有助于提供适当的反馈,它为您提供了很多关于错误在代码中位置的线索。

调试:例外消息通常提供有关出了什么问题,出了什么问题以及如何在您的代码中出现问题的有价值的信息。

用户友好型:可以使用异常消息为用户创建用户友好的体验。它指出了他们的错误或下一步。

测试:如果您不为代码编写单元测试,您是一个认真的开发人员吗?你的猜测和我一样好;例外使编写单元测试变得更容易。您可以模拟不同的错误方案并确保您的代码正确处理。

控制流:可以使用例外来代替“ IFS”,而否则语句试图弄清发生错误的可能性。

何时使用尝试和除外

使用试验和除外的块,当使用外部资源时(例如文件,网络连接或数据库连接),您应该使用尝试和块,以确保这些资源已正确关闭或发布,即使如果发生错误。例如

`

try:
     file = open("example.txt", "r")
     data = file.read()
 except FileNotFoundError:
     print("The file does not exist.")
 finally:
     file.close()

`
上述代码行可以解释为执行以下 -

步骤1 :尝试打开此文件

步骤2 :阅读文件的内容,

步骤3 :未找到或不存在文件,提出异常或请打印单词“该文件不存在”

步骤4 :最后!毕竟说并完成了,如果您找到文件,请关闭文件。

使用用户输入时的尝试和除外:您可以尝试和尝试验证和处理输入错误,以确保由于无效的用户输入而导致程序不会崩溃。作为开发人员,最后一个信任的人是您的用户,即使有明确的说明,您也不能相信他们始终输入正确的数据。您仍然会发现规则破坏者,因此您必须为它们做准备。

`

try:
     file = open("example.txt", "r")
     data = file.read()
 except FileNotFoundError:
     print("The file does not exist.")
 finally:
     file.close()

`
以上示例代码试图使用户的年龄作为输入并将其转换为整数。如果用户输入无法转换为整数的东西(例如,John或Mary等非数字字符串),它会捕获ValueError异常并显示错误消息,以告知用户他们需要输入有效的整数或数字。这有助于防止您的程序因无效的输入而崩溃,并通过优雅地处理错误提供更好的用户体验。

在需要进行网络和外部API调用时,请使用尝试和除外:在提出网络请求或访问外部API时,请尝试和尝试处理与网络相关的错误(例如超时)或连接性问题。

`

 import requests

 try:
     response = requests.get("https://www.google.com/")
     response.raise_for_status()  # Check for HTTP error status codes
 except requests.exceptions.RequestException as e:
     print(f"An error occurred: {e}")

`
上面的代码段演示了如何使用请求库将HTTP请求提交给URL并处理可能在请求期间发生的潜在错误。通过使用尝试和除块以外,它可以确保由于网络问题或HTTP错误而不会崩溃,并为用户提供反馈或为调试目的记录错误。

要在要执行文件操作时使用试验和除块,:在阅读,写作或操纵文件时,请使用尝试和块以处理与文件相关的错误,例如未找到的文件或权限问题。

`

try:
     with open("books.txt", "r") as file:
         content = file.read()
 except FileNotFoundError:
     print("The file does not exist.")

`
以上代码用于打开并读取名为“ books.txt”的文件的内容。如果该文件不存在或打开文件时还有其他任何问题,它将捕获FilenotFoundError异常并打印错误消息。

执行数据库操作时使用试验和除块:使用数据库时,使用尝试并使用数据库相关的错误,例如连接问题或SQL查询错误。

`

import sqlite3

try:
    conn = sqlite3.connect("mydb.db")
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM Users")
except sqlite3.Error as e:
    print(f"Database error: {e}")
finally:
    conn.close()

`
上面的代码段是使用SQLite3模块连接到SQLITE数据库的基本示例使用最终块正确关闭数据库连接。

知道何时绘制线
除了块外,有很多场景需要使用尝试和块,但是,您必须小心。在尝试和块除外,对于错误处理很有价值,但在适当的时间明智地使用它们至关重要。您必须能够优雅地处理异常和保持代码清晰可维护之间的平衡。

过量使用试验和块除外有其后果。它可以掩盖您的逻辑,降低应用程序的性能,使调试更具挑战性,并使整个代码库保持难以维护。

不要被带走,而是开始使用异常,以方便地进行。一个很好的提示是对超出您的条件使用例外。例如,网络错误,作为开发人员,您无法控制用户的网络情况,如果要进行API调用,其他应用程序可能正在遇到停机时间,这不是您的错,您无法控制,这些条件是非常适合尝试使用和块。

如何使用尝试和块除外
除了:

以外,除了python中的块外,没有关于如何使用尝试和障碍的演讲。

  • 识别可能引起异常或错误的代码

  • 在“尝试”块中包装有关代码

  • 处理'除外'块中的异常/错误

  • 设置要执行的“最后”块,无论是否发生异常。 (这主要是可选的)

`

try:
    # Code that may raise an exception
except SpecificExceptionType as e:
    # Handle SpecificExceptionType
except AnotherExceptionType as e:
    # Handle AnotherExceptionType
finally:
#code to run whether an exception occurred or not

`
这是一个简单的示例

`

try:
    user_input = input("Enter a number: ")
    number = int(user_input)
    print(f"You entered the number: {number}")
except ValueError as e:
    print(f"Invalid input: {e}")
finally:
    print("Nothing to be done")

`
有时候,人们可能会期望发生多个例外,您可以将它们全部堆叠起来,一个接一个地堆积。

`

x= int(input("Insert a Numerator: "))
y = int(input("Insert a denominator: "))
try:
    result = x/y
    print(result)
except ValueError as e:
    print("error: {}".format(e))
except ZeroDivisionError as e:
    print("error: {}".format(e))

`
以上代码段允许用户输入分子和分母。然后,它尝试执行分区并处理两种特定类型的异常:valueError(对于非目标输入)和ZerodivisionError(用于除以零)。如果发生这些例外中的任何一个,则代码通过显示错误消息来优雅地处理它们,从而阻止程序崩溃。

就是这样!!!这总结了我对尝试和块除外的小咆哮。所在地的课程将是使用尝试,除了真正需要的块;避免使用常规流量控制的异常,并使错误处理逻辑尽可能接近发生错误的位置。

感谢您参加我的TED演讲,如果您喜欢这个,请发表评论,然后关注我:

twitter:@codemistress1
LinkedIn:linkedin.com/in/chinemere-chukwu