Python异常

重要的是要有一种处理错误的方法。

Python为我们提供了异常处理。

如果将代码行包装到try:堵塞:

try:
    # some lines of code

如果发生错误,Python会提醒您,您可以使用except块:

try:
    # some lines of code
except <ERROR1>:
    # handler <ERROR1>
except <ERROR2>:
    # handler <ERROR2>

要捕获所有异常,您可以使用except没有任何错误类型:

try:
    # some lines of code
except <ERROR1>:
    # handler <ERROR1>
except:
    # catch all other exceptions

else如果未发现异常,则运行块:

try:
    # some lines of code
except <ERROR1>:
    # handler <ERROR1>
except <ERROR2>:
    # handler <ERROR2>
else:
    # no exceptions were raised, the code ran successfully

一种finally块允许您在任何情况下都执行某些操作,无论是否发生错误

try:
    # some lines of code
except <ERROR1>:
    # handler <ERROR1>
except <ERROR2>:
    # handler <ERROR2>
else:
    # no exceptions were raised, the code ran successfully
finally:
    # do something in any case

将要发生的特定错误取决于您正在执行的操作。

例如,如果您正在读取文件,则可能会EOFError。如果将数字除以零,则会得到一个ZeroDivisionError。如果您遇到类型转换问题,则可能会收到TypeError

试试下面的代码:

result = 2 / 0
print(result)

该程序将以错误终止

Traceback (most recent call last):
  File "main.py", line 1, in <module>
    result = 2 / 0
ZeroDivisionError: division by zero

and the lines of code after the error will not be executed.

Adding that operation in a try: block lets us recover gracefully and move on with the program:

try:
    result = 2 / 0
except ZeroDivisionError:
    print('Cannot divide by zero!')
finally:
    result = 1

print(result) # 1

You can raise exceptions in your own code, too, using the raise statement:

raise Exception('An error occurred!')

This raises a general exception, and you can intercept it using:

try:
    raise Exception('An error occurred!')
except Exception as error:
    print(error)

You can also define your own exception class, extending from Exception:

class DogNotFoundException(Exception):
    pass

pass here means “nothing” and we must use it when we define a class without methods, or a function without code, too.

try:
    raise DogNotFoundException()
except DogNotFoundException:
    print('Dog not found!')

More python tutorials: