Python中的异常是什么?
我已经读了三本初级Python书籍,但是我仍然不理解异常 有人能给我一个高层次的解释和/或为我指出一个好的指导方向吗Python中的异常是什么?,python,Python,我已经读了三本初级Python书籍,但是我仍然不理解异常 有人能给我一个高层次的解释和/或为我指出一个好的指导方向吗 我想我知道异常是代码或流程中导致代码停止工作的错误 最好从Python开始,因为您将看到的大多数都是从Python派生的 请记住,任何人都可以在任何事情上抛出他们想要的任何错误,然后抓住它并将其消除。下面是一个快速代码段,它使用异常来处理,而不是if/else,其中\uu get\u site\u file()在任何路径列表中都找不到文件时抛出异常。尽管有这个特殊的例外,代码仍然
我想我知道异常是代码或流程中导致代码停止工作的错误 最好从Python开始,因为您将看到的大多数都是从Python派生的 请记住,任何人都可以在任何事情上抛出他们想要的任何错误,然后抓住它并将其消除。下面是一个快速代码段,它使用异常来处理,而不是if/else,其中
\uu get\u site\u file()
在任何路径列表中都找不到文件时抛出异常。尽管有这个特殊的例外,代码仍然可以工作。但是,如果文件存在但权限不允许读取,代码将抛出一个未捕获的错误,停止执行
def __setup_site_conf(self):
# Look for a site.conf in the site folder
try:
path = self.__get_site_file('site.conf')
self.__site_conf = open(path).read()
except EnvironmentError:
self.__site_conf = self.__get_site_conf_from_template()
最好从Python开始,因为您将看到的大多数都是从Python派生的 请记住,任何人都可以在任何事情上抛出他们想要的任何错误,然后抓住它并将其消除。下面是一个快速代码段,它使用异常来处理,而不是if/else,其中
\uu get\u site\u file()
在任何路径列表中都找不到文件时抛出异常。尽管有这个特殊的例外,代码仍然可以工作。但是,如果文件存在但权限不允许读取,代码将抛出一个未捕获的错误,停止执行
def __setup_site_conf(self):
# Look for a site.conf in the site folder
try:
path = self.__get_site_file('site.conf')
self.__site_conf = open(path).read()
except EnvironmentError:
self.__site_conf = self.__get_site_conf_from_template()
例外不一定是错误。当代码遇到它(立即)不知道如何处理的事情时,它们会被提出。这可能是完全可以接受的,这取决于您如何编写代码。例如,假设您要求用户输入一个数字。然后尝试获取该文本(字符串)并将其转换为数字(int)。但是,如果用户输入,比如说,“cat”,这将引发一个异常。但是,您可以让您的代码处理该异常,而不是中断,只需给用户一条小消息,要求他重试,并请使用一个数字。请查看此链接以了解我所说的内容: 此外,通常使用try、except(或catch)块处理异常。例如:
try:
integer = int(raw_input("Please enter an integer: "))
except Exception, exc:
print "An error has occured."
print str(exc)
希望有帮助 异常不一定是错误。当代码遇到它(立即)不知道如何处理的事情时,它们会被提出。这可能是完全可以接受的,这取决于您如何编写代码。例如,假设您要求用户输入一个数字。然后尝试获取该文本(字符串)并将其转换为数字(int)。但是,如果用户输入,比如说,“cat”,这将引发一个异常。但是,您可以让您的代码处理该异常,而不是中断,只需给用户一条小消息,要求他重试,并请使用一个数字。请查看此链接以了解我所说的内容: 此外,通常使用try、except(或catch)块处理异常。例如:
try:
integer = int(raw_input("Please enter an integer: "))
except Exception, exc:
print "An error has occured."
print str(exc)
希望有帮助 在过去,当人们用汇编语言或C编写代码时,每次调用可能失败的函数时,都必须检查它是否成功。所以你会有这样的代码:
def countlines(path):
f = open(path, 'r')
if not f:
print("Couldn't open", path)
return None
total = 0
for line in f:
value, success = int(line)
if not success:
print(line, "is not an integer")
f.close()
return None
total += value
f.close()
return total
异常背后的想法是,您不必担心这些异常情况,只需写下以下内容:
def countlines(path):
total = 0
with open(path, 'r') as f:
for line in f:
total += int(line)
return total
如果Python无法打开该文件,或者无法将该行转换为整数,它将引发一个异常,该异常将自动关闭该文件、退出函数并退出整个程序,打印出有用的调试信息
在某些情况下,您希望处理异常,而不是让它退出您的程序。例如,您可能希望打印错误消息,然后要求用户输入其他文件名:
while True:
path = input("Give me a path")
try:
print(countlines(path))
break
except Exception as e:
print("That one didn't work:", e)
一旦您了解了异常试图实现的基本思想,就会有很多有用的信息
如果你想了解更多的背景知识,可以提供帮助(尽管在你理解基本概念之前,这篇文章不是很有用)
如果你仍然不明白,可以问一个更具体的问题。在过去,当人们用汇编语言或C编写代码时,每次调用可能失败的函数时,你都必须检查它是否成功。所以你会有这样的代码:
def countlines(path):
f = open(path, 'r')
if not f:
print("Couldn't open", path)
return None
total = 0
for line in f:
value, success = int(line)
if not success:
print(line, "is not an integer")
f.close()
return None
total += value
f.close()
return total
异常背后的想法是,您不必担心这些异常情况,只需写下以下内容:
def countlines(path):
total = 0
with open(path, 'r') as f:
for line in f:
total += int(line)
return total
如果Python无法打开该文件,或者无法将该行转换为整数,它将引发一个异常,该异常将自动关闭该文件、退出函数并退出整个程序,打印出有用的调试信息
在某些情况下,您希望处理异常,而不是让它退出您的程序。例如,您可能希望打印错误消息,然后要求用户输入其他文件名:
while True:
path = input("Give me a path")
try:
print(countlines(path))
break
except Exception as e:
print("That one didn't work:", e)
一旦您了解了异常试图实现的基本思想,就会有很多有用的信息
如果你想了解更多的背景知识,可以提供帮助(尽管在你理解基本概念之前,这篇文章不是很有用)
如果您仍然不明白,可以问一个更具体的问题。Python文档:
为了获得更高层次的解释,假设我们想要划分varA/varB
。我们知道varB
不能等于0,但我们可能不希望每次除法时都执行检查:
if varB != 0:
varA / varB
我们可以使用异常来尝试块而不首先执行条件,然后根据try
块中是否出现错误来处理程序的行为。在以下代码中,如果varB==0
,则会将“oops”打印到控制台:
try:
varA / varB
except ZeroDivisionError:
print 'oops'
以下是可以使用的例外情况列表:
但是,如果您知道它是如何失败的,您可以打开一个python控制台,查看引发了什么异常:
>>> 1 / 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>1/0
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ZeroDivisionError:整数除法或模零除法
Python文档: