如何缩进for循环中的行以使其与pep8兼容?
for ii in range(len(file_time)):
file_time[ii] = datetime.strptime(str(file_date[ii]) + " " + str(file_time[ii]),'%Y/%m/%d %H:%M:%S.%f').replace(microsecond=0)
我已经尝试了pep8文档提供的两个选项:
# Aligned with opening delimiter.
foo = long_function_name(var_one, var_two,
var_three, var_four)
# Hanging indents should add a level.
foo = long_function_name(
var_one, var_two,
var_three, var_four)
但我仍然得到同样的错误:
script.py:36:9:E122 continuation line missing indentation or outdented
答案 0 :(得分:3)
悬挂缩进应该可以正常工作:
for ii in range(len(file_time)):
file_time[ii] = datetime.strptime(
str(file_date[ii]) + " " + str(file_time[ii]),
'%Y/%m/%d %H:%M:%S.%f').replace(microsecond=0)
您可以通过避免使用str()
次转化(您已经拥有字符串),并使用zip()
和列表理解来改善这一点:
file_time = [
datetime.strptime('{} {}'.format(fd, ft)
'%Y/%m/%d %H:%M:%S.%f').replace(microsecond=0)
for fd, ft in zip(file_date, file_time)]
您也可以将转换提取到函数中:
def as_dt(datestr, timestr, fmt='%Y/%m/%d %H:%M:%S.%f'):
dt = datetime.strptime('{} {}'.format(fd, ft), fmt)
return dt.replace(microsecond=0)
file_time = [as_dt(fd, ft) for fd, ft in zip(file_date, file_time)]
答案 1 :(得分:2)
也许答案不是其中之一 - 只是因为它是允许的,并不意味着它是最好的方式。 pep8的目的是提高可维护性和可读性。为了使它符合pep8,更不用说更具可读性了,也许你应该将它分成多行。
TIME_FORMAT = "%Y/%m/%d %H:%M:%S.%f"
for ii in range(len(file_time)):
date_time = "{} {}".format(file_date[ii], file_time[ii])
file_time[ii] = datetime.strptime(date_time, TIME_FORMAT)
file_time[ii] = file_time[ii].replace(microsecond=0)
pep8中存在列限制的原因之一是鼓励您将代码拆分为更易读的部分。为了使事情尽可能可读,请尝试将代码保持为每行一个操作。
答案 2 :(得分:0)
python中的一般规则是,如果表达式被括号括起来,表达式可以包含换行符,这就是为什么......
for ii in range(10):
foo = 1+
2+
3
...生成一个SyntaxError,
虽然这......
for ii in range(10):
foo = (1+
2+
3)
......没有。
此外,由于您提到了缩进错误,请检查您是否始终使用制表符或空格进行标识。