code: def try_ntimes(_howmany, func, *argv, **kwarg):
      
      if (not isinstance(_howmany, int)) or (_howmany < 1):
          raise Exception("'_howmany' argument has to be int and greater than 0")
      
      counter = 1
      while counter <= _howmany:
          try:
              return func(*argv, **kwarg)
          except Exception as e:
              current_exception = e
              counter += 1
      raise current_exception
docs: Try a function n times.
      
      Try to execute func(*argv, **kwarg) ``_howmany`` times. If it successfully run 
      one time, then return as normal. If it fails N times, then raise the 
      exception in the last run.
      
      **中文文档**
      
      反复尝试一个函数或方法``_howmany``次。
      
      对func函数使用try, except, pass 若干次, 期间只要有一次成功, 就正常返回。
      如果一次都没有成功, 则行为跟最后一次执行了func(*argv, **kwarg)函数一样。
      
      这个实现利用了python中可以把函数作为一个参数传入另一个函数的特质, 将func
      函数中的参数原封不动地封装到了try_ntimes的参数中。只用一个额外参数``_howmany``
      控制重复次数。