Python try...except...else...finaly... 执行顺序与else执行场景

  1. 无论如何都会走finally
""" 无论如何都会走 finally """
def func():
  try:
    print(a)  # 未定义
    return 'try'
  except:
    print(b)  # 未定义
    return 'except'
  else:
    print('else')
    return 'else'
  finally:
    print('finally')
    return 'finally'
#
print(func())
#  finally
#  finally
#  print(a) -> print(b) -> print('finally) -> return 'finally'
  1. tryexceptelsereturn 时,在 return 前执行 finally 然后再执行 return
""" 当 try 或 except 或 else 带 return 时,在 return 前执行 finally 然后再执行 return """
def func():
  try:
    print('try')
    return 'try'
  except:
    print('except')
    return 'except'
  else:
    print('else')
    return 'else'
  finally:
    print('finally')
    return 'finally'
#
print(func())
#  try
#  finally
#  finally
#  print('try') -> before return 'try' -> print('finally) -> return 'finally'  # finally中执行return 'finally',不再返回到 return 'try'  
  1. try 正常执行且没有 return 时 才会执行 else
""" 当 try 或 except 或 else 带 return 时,在 return 前执行 finally 然后再执行 return """
""" 当try 正常执行且没有return 时 才会执行 else """
def func():
  try:
    print('try')
  except:
    print('except')
  else:
    print('else')
    return 'else'
  finally:
    print('finally')
    # return 'finally'
#
print(func())
#  try
#  else
#  finally
#  else
#  print('try') -> print('else') -> before return 'else' -> print('finally') -> return 'else'
  1. finaly 没有 ruturn,且 try...except... 均出错
""" finaly 没有 ruturn,且 try...except... 均出错 """
def func():
    try:
        print(a)  # 未定义
        return 'try'
    except:
        print(b)  # 未定义
        # return 'except'
    else:
        print('else')
        return 'else'
    finally:
        print('finaly')
        # return 'finaly'
print(func())
#  finaly
#  NameError: name 'a' is not defined
#  NameError: name 'b' is not defined
#  print(a) -> print(b) -> print('finaly') -> except 打印错误信息
  1. except 后可以跟多个异常类型,except可以有多个
  • else执行场景
    1. if ... else ...
    2. for/while ... else ...:当循环中没有break跳出循环时(continue时正常执行else
    for i in range(3):
        if i == 1:
            continue
        print(i)
    else:
        print('else')
    # 0
    # 2
    # else
    
    1. try ... except ... else ... :当try正常执行且没有return时(try中没有continuebreak
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容