错误和异常

try/execpt

try:
 	y = 10 / 0
except:
  print("执行异常")

如果一个异常没有任何 except 匹配,那么这个异常就会传递给上层 try 中。

一个 try 可以包含多个 except 子句,分别来处理不同的特定的异常。

import sys

try:
    f = open('myfile.txt')
    s = f.readline()
    i = int(s.strip())
except OSError as err:
    print("OS error: {0}".format(err))
except ValueError:
    print("Could not convert data to an integer.")
except:
    print("Unexpected error:", sys.exc_info()[0])
    raise

try/except...else

try/except语句还有一个可选的 else 子句,如果使用这个子句,必须放在所有 except 子句的后面。

for arg in sys.argv[1:]:
    try:
        f = open(arg, 'r')
    except IOError:
        print('cannot open', arg)
    else:
        print(arg, 'has', len(f.readlines()), 'lines')
        f.close()

try-finally

抛出异常

raise [Exception [, args [, traceback]]]
x = 10
if x > 5:
    raise Exception('x 不能大于 5。x 的值为: {}'.format(x))

自定义异常

# 异常类继承自 Exception 类
class MyError(Exception):
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return repr(self.value)

try:
    raise MyError(2*2)
except MyError as e:
    print('My exception occurred, value:', e.value)

raise MyError('oops!')

Last updated