python strTime将元组索引抛出超出范围

python strTime将元组索引抛出超出范围,python,strptime,Python,Strptime,使用Redhat Python 2.7.5,我试图使用datetime.datetime.strtime解析YYYY-MM-DD格式的日期,我间歇性地得到一个元组超出范围的错误,如下所示: client.py in parse_date(d='2014-12-05') 138 return dt.datetime.strptime(d,"%Y-%m-%d") 139 except: 140

使用Redhat Python 2.7.5,我试图使用
datetime.datetime.strtime
解析
YYYY-MM-DD
格式的日期,我间歇性地得到一个元组超出范围的错误,如下所示:

client.py in parse_date(d='2014-12-05')
    138                 return dt.datetime.strptime(d,"%Y-%m-%d")
    139             except:
    140                 raise Exception("Unexpected Date: '{0}' ({1})".format(d), e)
undefined, d = '2014-12-05', e undefined
<type 'exceptions.IndexError'>: tuple index out of range 
args = ('tuple index out of range',) 
message = 'tuple index out of range'
解析日期中的client.py(d='2014-12-05') 138返回dt.datetime.strtime(d,“%Y-%m-%d”) 139除: 140引发异常(“意外日期:{0}”({1})”。格式(d),e) 未定义,d='2014-12-05',e未定义 :元组索引超出范围 args=(‘元组索引超出范围’,) 消息='元组索引超出范围'
格式字符串看起来是正确的,问题的间歇性表明存在某种线程问题,但老实说,我不知道,也不知道如何可靠地再现错误。是否有解决此问题的建议?

因此,异常来自您的异常处理程序。Format只有一个参数,但使用了两个。

我认为问题在于捕获异常的方式:

except:
    raise Exception("Unexpected Date: '{0}' ({1})".format(d), e)
在这里,您没有正确地将变量
e
传递到
format
。相反,它应该是

except:
    raise Exception("Unexpected Date: '{0}' ({1})".format(d, e))
此外,如果
e
恰好是异常,则需要显式获取一个变量,如下所示:

except Exception as e:
    raise Exception("Unexpected Date: '{0}' ({1})".format(d), e)
最后,最好捕获try块可能引发的特定错误,因此您应该这样做

except ValueError as e:
    raise Exception("Unexpected Date: '{0}' ({1})".format(d), e)

好的,对不起,是的:但是为什么要访问异常处理程序?@user118165可能是因为日期
d
的格式不总是正确的?或者try块中可能还有一些引发异常的代码。。。由于您捕获了泛型
异常,并尝试引发一个新异常,因此有关引发的实际异常的信息将丢失。@user118165:这将告诉您该异常。@user118165如果这有帮助,请不要忘记确定,对于发现该异常的任何人,在我修复了异常处理程序的格式之后,我最终在datetime中跟踪到了一个竞争条件,有文档记录。解决方案是在任何线程启动之前添加显式的
import\u strtime
。希望这有帮助。