让知识连接你我
投稿赚钱
当前位置: 首页 > 后端开发 > Python基础学习教程系列讲解——try_except异常处理机制
  • 101
  • 微信分享

    扫一扫,在手机上查看

Python基础学习教程系列讲解——try_except异常处理机制

2019.09.12 10:00 234 浏览 举报

  在Python编程中难以避免的会经常出现不正常,在调节环节经常出现写法这类的不正常时,Pycharm会在Debug对话框显示不正常,可是程序流程在实施时鉴于内部结构隐藏的难题而造成不正常,会致使程序流程中止实施。例如下列方法中,采用urllib库点开URL时鉴于网络不稳定而产生了不正常:

  import urllib.request
  req = urllib.request.urlopen('http://www.baidu.com')
  print(req.read())
  Traceback (most recent call last):
  ……
  TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

  在Python中经常出现解释器没法一切正常解决的程序流程的时候会导致不正常。假如要防止程序流程在不正常产生时终结实施,那样一般采用异常处理语句捕捉到不正常,再依据另外的思维编码让程序流程持续实施。异常处理词句为try/except,它的基础句法结构给出:

  try:
  < 语句 > # 运行代码
  except [(Error1, Error2, ...)[as e]]:
  < 语句 > # 如果在try中引发了'Error1'异常
  except [(Error3, Error4, ...)[as e]]:
  < 语句 > # 如果在try中引发了'Error3'异常
  except:
  < 语句 > # 如果在try中引发了其他异常

  当Python 解释器在实施 try 中的编码时发现异常,Python 解释器会逐个判定该不正常目标是不是 except 块后的不正常类或其子类的范例,依据该不正常的类别探寻能解决该不正常目标的 except 块,假如寻找适宜的 except 块,则把该不正常目标交到该 except 块解决。假如 Python 解释器找不着捕捉到不正常的 except 块,则执行程序中止,Python 解释器也将撤出。

  从 try except 的基础写法文件格式能够看到,try 块仅还有一个,但 except 编码块能够有好几个,它是因为应对不一样的不正常类别出具不一样的异常处理类型,例如下列方法中,各自界定了浮点计算误差FloatingPointError不正常和输入/输出操作不成功IOError不正常:

  try:
  import urllib.request
  req = urllib.request.urlopen('http://www.baidu.com')
  print(req.read())
  except FloatingPointError:
  print("Capture FloatingPointError")
  except IOError:
  print("Capture IOError")
  except Exception:
  print("Capture Error")
  except:
  print("Capture Error")

  以上程序流程应对 FloatingPointError、IOError类别的不正常,出具了专做的异常处理思维。该执行程序时的异常处理思维将会有给出几类状况:

  •   假如在实施该程序流程时经常出现浮点计算误差,Python 将启用 FloatingPointError 相匹配的 except 块解决该不正常。

  •   假如在实施该程序流程时经常出现输入/输出操作不成功,Python 将启用IOError相匹配的 except 块解决该不正常。此处解释器会实施IOError的异常处理。

  •   假如在执行程序时经常出现另外不正常,Python 能够启用 Exception 相匹配的 except 块解决该不正常。或许except后面还可以不特定其他不正常类。

  在写法中的[]内为能选具体内容,故此能够有下列几类类型:

  1 . except 后不特定实际的不正常名字,表达要捕捉到任何类别的不正常。

  try:
  < 语句 > # 运行代码
  except:
  < 语句 > # 如果在try中引发了其他异常

  2 . except 后特定实际的不正常名字,表达捕捉到特定类别的不正常。比如 Error1、Error2、Error3、Error4分别表示各自的 except 块可以处理异常的具体类型。

  try:
  <语句> # 运行代码
  except Error1:
  <语句> # 如果在try中引发了'Error1'异常

  3 . [as e] 表示将异常类型赋值给变量 e,以方于在 except 块中调用异常类型。所有的异常对象都包含了如下几个常用属性和方法:

  args:该属性返回异常的错误编号和描述字符串。

  errno:该属性返回异常的错误编号。

  strerror:该属性返回异常的描述字符串。

  with_traceback():通过该方法可处理异常的传播轨迹信息。

  try:
  import urllib.request
  req = urllib.request.urlopen('http://www.baidu.com')
  print(req.read())
  except FloatingPointError:
  print("Capture FloatingPointError")
  except IOError as e:
  print("Capture IOError")
  print(e.args) # 访问异常的错误编号和详细信息
  print(e.errno) # 访问异常的错误编号
  print(e.strerror) # 访问异常的详细信息
  except:
  print("Capture Error")
  (TimeoutError(10060, 'A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond', None, 10060, None),)
  None
  None

  如果要查看更详细的异常信息,可以导入traceback模块,使用print_exc()打印异常信息。print_exc()还可以接受file参数直接写入到一个文件。比如:

  traceback.print_exc(file=open('except.txt', 'w+')) # 写入到except.txt文件去

  以下为Python部分标准异常类:

50facaede36e4ce6881cc6eb18a5a580.jpg

本文首次发布于开创者素材 ,转载请注明出处,谢谢合作!

相关文章推荐