代码:
import datetime
TF = "%d-%M-%Y %H:%M"
last= datetime.datetime.strptime( "11/07/10 10:00", TF)
引发以下异常:
Traceback (most recent call last):
File "strange.py", line 4, in <module>
last= datetime.datetime.strptime( "11/07/10 10:00", TF)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_strptime.py", line 308, in _strptime
format_regex = _TimeRE_cache.compile(format)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_strptime.py", line 265, in compile
return re_compile(self.pattern(format), IGNORECASE)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 194, in compile
return _compile(pattern, flags)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 251, in _compile
raise error, v # invalid expression
sre_constants.error: redefinition of group name 'M' as group 5; was group 2
现在我相信我的错误是我在定义日期格式时使用%M两次。这是我的疑问:
我希望代码可以:
a)接受你的事实在字符串中有两次相同的时间值(它可能是重要的,但是#34;星期一和#34;如果你有其余的日期) b)抛出一个值错误,表示同一个字段不应该被多次使用。
这看起来非常不同。发生了什么事?
答案 0 :(得分:1)
Value Error
- 所以在这种情况下,这意味着发送{{1}作为格式错误的格式错误的字符串(例如,尝试TF
)。
在这里你使用了正确的格式 - 但是当你的错误提到时,你在SRE配对部分失败了 - 因为你定义了同一个组(这是解释%K
的方式)两次,以及正则表达式解析器失败,因为当你告诉他组%x
应该匹配字符串的两个不同部分时它无法理解,它不能自己“猜测”。
答案 1 :(得分:0)
没有直接检测到您所犯的具体错误。
日期时间模块将您的strptime
格式转换为正则表达式以进行实际解析,而无需对其进行分析(或有任何需要对其进行分析),以足够详细地注意重复字段。这导致了一个无效的正则表达式,并且re模块正确地抛出了一个错误 - 我认为它更接近于SyntaxError而不是ValueError。 datetime模块在没有试图找出问题根源的情况下传递了它。
答案 2 :(得分:0)
你有2个错误:
格式不匹配,因为您在TF中使用“ - ”并作为时间传递“/”!你应该传递与字符串相同的格式。
你通过2分钟符号('M'=分钟,'m'=月)
这是适合您的正确解决方案:
import datetime
TF = "%d-%m-%y %H:%M"
last= datetime.datetime.strptime( "11-07-10 10:00", TF)
祝你好运!