Python 内置异常
在Python中,每个实例都必须属于一个继承自Base Exception的类。虽然它们具有相同的名称,但是没有通过子类关联的两个异常类永远不相等。解释器或内置方法可能会产生内置异常。
当出现错误时,Python中会引发一些内置异常。Python中有一些内置异常,您始终可以引发并在任何代码中处理。以下是一些最常见的内置异常:
1. BaseException
Python中的所有异常的基础类被称为BaseException。它是Python标准库中所有其他异常类的父类,是一个内置类。它提供了所有异常的基本框架,并作为开发独特异常的基础。
以下是BaseException的一些特性和方法:
- args: 当异常被引发时,给出异常的所有参数的元组。
- with_traceback: 一个名为_traceback的方法使您可以向错误添加回溯信息。
- __str__: 一个将异常作为字符串提供的函数称为str。
示例:
代码
# Python program for Base Exception
class CustomException(BaseException):
def __init__(self, message):
self.message = message
def __str__(self):
return self.message
raise CustomException("This is a custom exception.")
输出:
CustomException Traceback ( most recent call last )
Input In [ 1 ], in < cell line : 8>( )
5 def __str__( self ) :
6 return self.message
---- > 8 raise CustomException(" This is a custom exception. ")
CustomException : This is a custom exception.
2.Exception
所有Python异常都派生自这个基本类。它作为语言中所有其他内置异常的父类。如果您希望设计自己独特的异常,则可以继承 Exception 类。因此,与内置异常相同地处理自定义异常非常简单。建议所有用户定义的异常都起源于此类。
示例:
代码
# Python program for exception Exception
class MyException(Exception):
pass
try:
raise MyException(" This is a custom exception. ")
except MyException as e:
print(" A custom exception was raised : ", e)
输出:
A custom exception was raised : This is a custom exception.
3. AttributeError
每当属性引用或赋值失败时,将抛出此异常。通常在尝试访问对象上不存在的属性或方法时会发生此异常。
示例:
代码:
# Python program for Attribute Error
class MyClass:
pass
obj = MyClass()
try:
print(obj.non_existent_attribute)
except AttributeError as e:
print(" An attribute error occurred : ", e)
输出:
An attribute error occurred : ' MyClass ' object has no attribute ' non_existent_attribute '
4. TypeError
当在一个错误的类型对象上使用Python操作或函数时,会抛出TypeError异常。这经常发生在你试图使用错误的参数类型调用函数或对错误类型的对象执行操作时。
示例:
代码:
# Python program for Type Error
try:
result = "10" + 10
except TypeError as e:
print(" A type error occurred : ", e)
输出:
A type error occurred : can only concatenate str (not " int ") to str
5. ValueError
当将正确类型但不正确值的参数传递给内置方法或函数时,因为没有其他更具体地描述这种情况的异常,Python 会触发 ValueError 异常。
示例:
代码
# Python program for Value Error
try:
int(" a ")
except ValueError as e:
print(" A value error occurred : ", e)
输出:
A value error occurred : invalid literal for int() with base 10 : ' a '
6. KeyError
每当在Python中搜索一个不存在的键时,都会引发KeyError异常。
示例:
代码
# Python program for Key Error
my_dict = {' a ': 1, ' b ' : 2}
try:
value = my_dict[' c ']
except KeyError as e:
print(" A key error occurred : ", e)
输出:
A key error occurred : ' c '
7. IndexError
当索引超出范围时,会引发此异常。在Python中,如果仅使用超出边界的索引访问列表,则会引发IndexError异常。
示例:
代码:
# Python program for Index Error
my_list = [1, 2, 3]
try:
value = my_list[3]
except IndexError as e:
print(" An index error occurred : ", e)
输出:
An index error occurred : list index out of range
8. FileNotFoundError
当请求一个文件或目录时,但指定的文件或目录不存在时,会抛出该异常。当要读取、访问或检索的文件不存在时,Python会抛出FileNotFoundError异常。
示例:
代码:
# Python program for FileNotFoundError
try:
with open(" myfile.txt ") as f:
contents = f.read()
except FileNotFoundError as e:
print(" A file not found error occurred : ", e)
输出:
A file not found error occurred: [ Errno 2 ] No such file or directory : ' myfile.txt '
9. ImportError
当导入语句失败时抛出此异常。每当Python确实可以导入一个包或模块时,都会触发ImportError异常。
示例:
代码:
# Python program for Import Error
try:
import nonexistent_module
except ImportError as e:
print(" An import error occurred : ", e)
输出:
An import error occurred : No module named ' nonexistent_module '
10. ArithmeticError
当进行算术运算失败时(如除以零或计算负整数的平方根),Python内置的算术错误(ArithmeticError)异常将被触发。更专门的算术错误类的基础类,如OverflowError和ZeroDivisionError,被称为ArithmeticError。
示例:
代码
# Python program for Arithmetic Error
try:
result = 1/0
except ArithmeticError as e:
print(" An arithmetic error occurred : ", e)
输出:
An arithmetic error occurred : division by zero
11. OverflowError
每当算术运算产生的结果太大而无法表示时,Python的内置OverflowError异常就会被触发。当数学函数的结果超过了最高可表示的整数时,就会产生这个异常,它是ArithmeticError的一个子类。
示例:
代码:
# Python program for Overflow Error
try:
result = 10 ** 100000
except OverflowError as e:
print(" An overflow error occurred : ", e)
12. SyntaxError
当Python解释器在你的代码中遇到语法问题时,会触发内置异常语法Error。语法错误发生在代码违反Python编程语言的语法要求时,例如当保留字被错误使用,缩进被错误使用,或引号被错误使用。
代码
# Python program for Syntax Error
x = 5
if x > 10
print(" x is greater than 10 ")
输出:
SyntaxError : invalid syntax
13. AssertionError
每当断言语句失败时,就会抛出内置的 Python 异常 AssertionError。断言声明用于验证必须为真才能继续进行进程的条件。如果在断言语句中声明的条件不为真,则会抛出 AssertionError 异常。
示例:
代码:
# Python program for Assertion Error
x = 5
assert x > 10, " x is not greater than 10 "
输出:
AssertionError: x is not greater than 10
14. FloatingPointError
每当涉及浮点整数的操作产生无法定义或没有意义的数学结论时,Python的内置特性会触发FloatingPointError异常。当进行除以零操作或当值太大或太小而无法表示为浮点数时,可能会发生这种情况。
Code
# Python program for FloatingPointError
x = float(' inf ')
y = x / x
print(y)
输出:
nan
15. EOFError
每当遇到文件结束标记(EOF)并且没有更多数据可以读取时,Python的内置EOFError异常会被触发。当获取文件、套接字或其他输入流的内容时,可能会发生这种情况。
示例:
代码:
# Python program for EOFError
try:
file = open(" example.txt ", " r ")
for line in file:
print(line)
file.read()
except EOFError:
print(" Reached end of file. ")
finally:
file.close()
输出:
EOFError : EOF when reading a line
这是一个示例,演示了如何引发和处理不同的内置异常:
代码
# Python program for demonstrating and handling Built in Excpetions
try:
a = [ 1, 2, 3 ]
print(a[ 3 ])
except IndexError as e:
print(" An index error occurred : ", e)
try:
b = 5
print(b / 0)
except ZeroDivisionError as e:
print(" A division by zero error occurred : ", e)
try:
c = " hello "
d = int(c)
except ValueError as e:
print(" A value error occurred : ", e)
输出:
An index error occurred : list index out of range
A division by zero error occurred: division by zero
A value error occurred : invalid literal for int( ) with base 10 : ' hello '
在这个示例中,第一个try块引发了IndexError异常,该异常被except块捕获并处理。第二个try块引发了ZeroDivisionError异常,该异常也被except块捕获并处理。第三个try块引发了ValueError异常,该异常被except块捕获并处理。
这展示了你如何在Python中引发和处理不同的内置异常,以及如何为每种类型的异常编写特定的异常处理程序。通过使用异常处理,你可以编写健壮的代码,能够优雅地处理错误和异常,并为用户提供有意义的错误消息。