Python 错误与异常处理 - 完整攻略
Python 是一门强大的编程语言,但是编写代码时难免会出现错误和异常。这篇文档将讲解 Python 中的错误和异常处理。
异常
Python 中的异常是指运行时出现的错误。当程序出现异常时,程序将停止运行并输出错误信息。Python 中有许多内置的异常类,例如 ZeroDivisionError、TypeError 等。抛出异常就是在提示程序出现了错误。
最常见的异常是 NameError
,该异常会在试图使用未定义的变量时抛出。例如:
print(age) # NameError: name 'age' is not defined
当你想指定一个变量名,但是该变量未被定义时,将会出现这种情况。
抛出异常
Python 的 raise 语句抛出一个异常,也就是说,它会让代码解释器停止执行,并有可能给出一个错误信息。你还可以自定义异常,让你的程序处理特定的错误情况。
下面是一个自定义异常的例子:
def calculate_age(age):
if age < 0:
raise ValueError('Age must be a positive integer.')
return age * 365
print(calculate_age(-5)) # ValueError: Age must be a positive integer.
上述代码中,如果 calculate_age
函数的参数值小于零,它将抛出一个 ValueError
异常。这个自定义异常指定了错误信息 "Age must be a positive integer."。
捕获异常
为了避免程序在出现异常时停止运行,我们可以使用 Python 中的 try 和 except 语句来进行异常捕获。如果异常被捕获,程序总是会继续执行。
下面是一个 try 和 except 语句的例子:
try:
num = int(input("请输入数字:"))
result = 100 / num
print(result)
except ValueError:
print("输入内容不是数字!")
except ZeroDivisionError:
print("不能使用 0 作为被除数!")
except Exception as e:
print("发生了一个未知的错误!")
print(e)
这段代码首先会提示用户输入一个数字。如果用户输入了一个字母或其他非数字字符,程序会抛出一个 ValueError 异常。如果用户输入了 0 作为除数,程序会抛出一个 ZeroDivisionError 异常。如果出现的不是这两个异常,异常处理器会捕获一个 Exception 异常,并输出该异常的信息。
try/else
还有一种方式可以使用 try 语句。如果 try 语句块中的代码没有抛出异常,else 代码块中的代码就会运行,然后程序将继续执行。
下面是一个 try/else 语句的例子:
try:
print('try block')
except:
print('exception block')
else:
print('No exception raised.')
不管异常是否被抛出,else 块中的代码都会执行。
try/finally
try 语句块也可以和 finally 语句块一起使用。不论异常是否被抛出,finally 语句块中的代码都会执行。
下面是一个 try/finally 语句的例子:
try:
f = open('file.txt', 'r')
print(f.read())
finally:
f.close()
在这个例子中,try语句块尝试打开一个名为 file.txt 的文件,并将其内容打印到控制台上。当操作完成时,所有的文件句柄都必须被关闭以释放系统资源。finally 语句块中的代码以普通方式关闭文件句柄,并确保该文件句柄被正常清理。
总结
Python 异常机制为你的程序提供了优雅的失败方案。使用 try/except 语句块来捕获异常是常用的异常处理方式,这样你的程序可以在出现异常时继续运行。
不过,处理异常的最好方式是先预测将要出现的异常,并编写代码以防止它们的出现。
尽管异常处理是很重要的一部分,但是并不应该滥用。如果你过多地使用异常处理机制,可能会使你的代码更难阅读和维护。
希望这篇完整攻略能帮助你更好地处理 Python 中的错误和异常。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python错误与异常处理 - Python技术站