在尼日利亚的当地列表中,我们说诸如“编码甜但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,它将返回“您在线”,但是如果您离线或尝试推迟互联网连接时;如下所示,它生成了这卡车的错误 -
时`
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)
`
断开您的互联网,您将获得此错误 -
在第一个错误和第二个错误之间,您可以同意我的同意,第二个错误看起来不那么令人生畏,也不那么艰巨。但这不是收获。尝试和块除外非常有帮助,因为您可以根据需要自定义错误。您可以使用尝试和块除外,设计自己的错误消息,该消息短,清晰且简洁。
因此,而不是遇到此错误:这无助于任何人或指向错误的来源。您可以将其自定义为“您是离线”或您选择的任何消息。
看一下:
`
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)
`
当您在互联网断开连接时运行上述代码行时,您会收到由您设计的更友好的错误消息。
使用尝试和块除外的一些优点如下:
程序鲁棒性:尝试和除块除外,您的程序在视线或遇到错误时突然停止了程序。它优雅地处理错误。它有助于提供适当的反馈,它为您提供了很多关于错误在代码中位置的线索。
调试:例外消息通常提供有关出了什么问题,出了什么问题以及如何在您的代码中出现问题的有价值的信息。
用户友好型:可以使用异常消息为用户创建用户友好的体验。它指出了他们的错误或下一步。
测试:如果您不为代码编写单元测试,您是一个认真的开发人员吗?你的猜测和我一样好;例外使编写单元测试变得更容易。您可以模拟不同的错误方案并确保您的代码正确处理。
控制流:可以使用例外来代替“ 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调用,其他应用程序可能正在遇到停机时间,这不是您的错,您无法控制,这些条件是非常适合尝试使用和块。
如何使用尝试和块除外
除了:
-
识别可能引起异常或错误的代码
。 p> li> -
在“尝试”块中包装有关代码
-
处理'除外'块中的异常/错误
-
设置要执行的“最后”块,无论是否发生异常。 (这主要是可选的)
`
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