在Python编程中,错误(Errors)和异常(Exceptions)是两种不同类型的运行时问题,但通常都被称为“异常”。理解并正确处理这些异常对于编写健壮和可靠的代码至关重要。
错误(Errors)
错误通常是由于Python解释器或编译器在解析代码时遇到的语法问题,这些问题使得代码无法执行。错误是语法问题,通常会在代码解析时被发现。
例如:
def hello():
print("Hello, World!"
运行结果如下:
> python error_demo.py
File "error_demo.py", line 2
print("Hello, World!"
^
SyntaxError: '(' was never closed
在这个例子中,由于缺少函数调用括号,Python解释器会抛出一个SyntaxError错误。
异常(Exceptions)
异常是在代码执行过程中发生的运行时问题,通常是由于程序中的某些操作无法按照预期进行。异常是运行时问题,通常是由于某些操作无法按预期执行。
例如:
result = 10 / 0
运行结果如下:
> python exception_demo.py
Traceback (most recent call last):
File "exception_demo.py", line 1, in <module>
result = 10 / 0
~~~^~~
ZeroDivisionError: division by zero
在这个例子中,由于尝试除以零,Python会抛出一个ZeroDivisionError异常。
异常处理
Python提供了try、except和finally关键字来处理异常。
- try块:放置可能引发异常的代码。
- except块:处理特定类型的异常。
- finally块:无论是否发生异常,都会执行finally块中的代码。
try:
result = 10 / 0
except ZeroDivisionError:
print("除数为0")
finally:
print("无论如何都会执行")
运行结果如下:
除数为0
无论如何都会执行
在这个例子中,当尝试除以零时,ZeroDivisionError异常被捕获,并打印出错误消息。无论是否发生异常,finally块中的代码都会执行。
捕获多个异常
你可以使用多个except块来捕获不同类型的异常,或者在一个except块中指定多个异常类型:
try:
result = 10 / 0
except ZeroDivisionError:
print("ZeroDivisionError")
except ValueError:
print("ValueError")
try:
value = int("abc")
except (ZeroDivisionError, ValueError):
print("ZeroDivisionError or ValueError")
运行结果如下:
ZeroDivisionError
ZeroDivisionError or ValueError
获取异常信息
在except块中,你可以通过as关键字将异常对象赋值给一个变量,然后打印或处理这个异常对象的信息。
try:
value = int("abc")
except (ZeroDivisionError, ValueError) as e:
print("error:", e)
运行结果如下:
error: invalid literal for int() with base 10: 'abc'
自定义异常
Python允许你定义自己的异常类,通过继承内置的BaseException类来实现。
class CustomException(BaseException):
def __init__(self, message):
super().__init__(message)
self.message = message
def __str__(self):
return self.message
try:
raise CustomException("这是一个自定义异常!")
except CustomException as e:
print(e)
运行结果如下:
这是一个自定义异常!