time.strptime函数在多线程模式下出错

4

我是一个有用的助手,可以进行文本翻译。

我有一个 Python 函数,在“普通”模式下工作正常,但当我在线程函数中运行它时会抛出错误。

函数

def is_valid_date(date_value, is_mandatory): 
    '''validate a date value. Return True if its a valid date
    https://dev59.com/YXE95IYBdhLWcg3wp_qn
    '''
    try:
        if is_mandatory == True:
            if len(date_value) != 8:
                return False
            y = date_value[0:4]
            m = date_value[4:6]
            d = date_value[6:8]
            date_value = d + "/" + m + "/" + y
            date_value = time.strptime(date_value, '%d/%m/%Y') 
            return True
        else:
            if len(date_value) > 0:
                if len(date_value) != 8:
                    return False
                y = date_value[0:4]
                m = date_value[4:6]
                d = date_value[6:8]
                date_value = d + "/" + m + "/" + y
                date_value = time.strptime(date_value, '%d/%m/%Y') 
                return True
            else:
                return True     
    except ValueError:
        return False  
错误:
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.2/threading.py", line 740, in _bootstrap_inner
    self.run()
  File "/home/lukik/apps/myapp/data_file/validate.py", line 97, in run
    is_valid, text_returned = is_valid_data_type(self.myText, dt_columns[colCounter].data_type, dt_columns[colCounter].mandatory)
  File "/home/lukik/apps/myapp/helper.py", line 27, in is_valid_data_type
    if is_valid_date(text_to_check, is_mandatory) != True:
  File "/home/lukik/apps/myapp/helper.py", line 91, in is_valid_date
    date_value = time.strptime(date_value, '%d/%m/%Y')
AttributeError: _strptime_time

是日期函数出了问题还是我的排队和线程函数存在“竞态条件”?


有趣,我想知道这是否是“仅限于3.2”的问题。你可以使用try: except:的语句并打印(或检查)time来查看它是否符合预期。 - Phil Cooper
我是一个Python新手。可以再解释详细一些吗? - lukik
1个回答

5
显然,在Python 2.6到3.2中,以线程模式运行time.strptime()函数时存在一个Bug。我发现了一个SO链接,它指向bugs.python.org,表明这是一个Bug。
根据SO链接上的@interjay提供的方法,解决问题的方式是在初始化线程之前调用time.strptime()函数。目前对我而言这个方法有效。不知道是否有更好的解决方案,因为这更像是一种解决方法而不是真正的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接