异常except

一、手动抛出异常
x = 1 if x > 5: # 手动抛出一个异常,可以巧妙的运用这种方法,给调用者发送一个信息 raise Exception('x 不能大于 5。x 的值为: {}'.format(x)) # ------------------------------------------------------------ try: 1 / 1 # 1 / 0 except Exception: raise # 把捕获到的异常往上抛 # --------------------------------------------------- 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)
二、完整实例
def fun(): try: f = open("a.txt", "w") # 如果上面出错的话,这行代码就不会执行,f就不会被创建。 # a = int("a") # ValueError: invalid literal for int() with base 10: 'a' # i = 1 / 0 # ZeroDivisionError: division by zero # a = int("a") except Exception as e: raise Exception("错错错") # 这里是显示抛出一条异常,可以是自定义异常。 traceback.print_exc() # 这条语句可以打印出错误类型 print("出错了", e) # 这条语句无法打印出错误类型。 else: print("try语句通过!") # 如果有异常,执行excpte,没有异常才执行else try: print("再次try") return "函数调用成功!" except ValueError as e: print(e) finally: print("最终都要执行的代码。用于释放资源。try异常没有被捕获,或者手动抛出了新的异常,都会执行这里的代码,也是最后一条代码了,如果函数调用者也不捕获错误,那么接下来就是程序崩溃") # 这里通常用于释放资源。比如,先打开了文件,后面的代码异常了,最后还是要关闭文件释放资源。 f.close() # 如果上面的f没有创建的话,这里就会出错。UnboundLocalError: loca…… print('try 以外的代码,如果try异常被捕获了,才会执行后面的代码,否则不会执行') print(fun())
两个例子;
def spam(divideBy): try: return 42 / divideBy except ZeroDivisionError: # print('Error: Invalid argument.') pass print(spam(2)) # 21.0 print(spam(12)) # 3.5 print(spam(0)) # None print(spam(1)) # 42.0 def spam(divideBy): return 42 / divideBy try: print(spam(2)) # 21.0 print(spam(12)) # 3.5 print(spam(0)) # 不能输出 print(spam(1)) # 不能输出 except ZeroDivisionError: print('Error: Invalid argument.')
def fun(): try: 1/0 finally: print("最终都要执行的代码。") print('这条语句不会输出,因为上面没有excpt') try: fun() except Exception as e: print(e)

浙公网安备 33010602011771号