Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么赢了';t zfill将在python中处理字符串对象吗?_Python_Python 3.x_String - Fatal编程技术网

为什么赢了';t zfill将在python中处理字符串对象吗?

为什么赢了';t zfill将在python中处理字符串对象吗?,python,python-3.x,string,Python,Python 3.x,String,我试图将传递到此函数的日期YYYY-M?M-D?D转换为一个整数和一个列表的元组,每个日期部分都有单独的元素。由于我接收数据的方式以及我希望重复使用数据的方式,我认为我需要在日期的每个部分使用zfill()来追加0,以保持YYYY-MM-DD格式 def parse_date(日期:str)->元组: """ 将日期字符串转换为元组,元组包含整数和拆分日期 :param date:格式为“YYYY-MM-DD”的日期字符串 :rtype:tuple """ 拆分日期=日期。拆分('-')) re

我试图将传递到此函数的日期
YYYY-M?M-D?D
转换为一个整数和一个列表的元组,每个日期部分都有单独的元素。由于我接收数据的方式以及我希望重复使用数据的方式,我认为我需要在日期的每个部分使用
zfill()
来追加0,以保持
YYYY-MM-DD
格式

def parse_date(日期:str)->元组:
"""
将日期字符串转换为元组,元组包含整数和拆分日期
:param date:格式为“YYYY-MM-DD”的日期字符串
:rtype:tuple
"""
拆分日期=日期。拆分('-'))
regex_arr=[
r“(\d{4}?),r“(0[0-9]| 1[0-2])”,r“(0[0-9]| 1[0-9]| 2[0-9]| 3[0-1])”
]
对于zip中的日期部分、正则表达式部分(拆分日期、正则表达式):
已编译的正则表达式=重新编译(正则表达式部分)
is_date=编译的正则表达式匹配(日期部分)
如果不是,请填写日期:
如果len(拆分日期[0])!=4:
提高合成误差(
f“无效语法:输入的日期({date})应为YYYY-MM-DD格式”
)
拆分日期。替换(日期部分,日期部分。zfill(2))
date_section=date_section.zfill(2)
is_date=编译的正则表达式匹配(日期部分)
如果不是,请填写日期:
提高合成误差(
f“无效语法:输入的日期({date})应为YYYY-MM-DD格式”
)
不管出于什么原因,zfill都不起作用。我检查了日期部分是否为字符串,它们是否为字符串。我完全迷路了。

非常感谢凯文

基本上,我需要枚举zip并使用索引值来更新列表 代码如下:

对于i,(日期部分,
枚举中的正则表达式(zip(拆分日期,正则表达式arr)):
已编译的正则表达式=重新编译(正则表达式部分)
is_date=编译的正则表达式匹配(日期部分)
如果不是,请填写日期:
如果len(拆分日期[0])!=4:
提高合成误差(
f“无效语法:输入的日期({date})应为YYYY-MM-DD格式”
)
date_section=date_section.zfill(2)
拆分日期[i]=日期段
is_date=编译的正则表达式匹配(日期部分)
如果不是,请填写日期:
提高合成误差(
f“无效语法:输入的日期({date})应为YYYY-MM-DD格式”
)

我犯了一个大错误

您的问题是在拆分后没有重新分配

对于datetime验证来说,这看起来非常“大”——问题已经在datetime.strTime中解决了:

输出:

(1234, 10, 11)
Invalid Syntax: The date inputed (1234-1-11) should be in YYYY-MM-DD format
Invalid Syntax: The date inputed (1234-22-11) should be in YYYY-MM-DD format

split\u date.replace(date\u节,date\u节.zfill(2))
在我看来很可疑。请记住,
str.replace
不执行任何操作,除非将结果分配给某个对象。
split\u date
是一个
列表
对象,它没有
replace
方法。你是说
split_date[0]
?顺便说一句,你不应该在这里提出语法错误。@juanpa.arrivillaga为什么不呢?因为这不是语法错误,这意味着python源代码中存在错误,解析器在编译时会遇到这个错误。要引发的更合适的异常是
ValueError
,或自定义异常。
print(parse_date("1234-10-11"))
try:
    parse_date("1234-1-11")
except SyntaxError as s:
    print(s)
try:
    parse_date("1234-22-11")
except SyntaxError as s:
    print(s)
(1234, 10, 11)
Invalid Syntax: The date inputed (1234-1-11) should be in YYYY-MM-DD format
Invalid Syntax: The date inputed (1234-22-11) should be in YYYY-MM-DD format