如何缩进此行以获得 pep8 兼容性

How to indent this line for pep8 compatibility

如何缩进 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

悬挂缩进应该可以正常工作:

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)]

也许答案不是这两个 - 只是因为它是允许的,并不意味着它是最好的方法。 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 中存在列限制的原因之一是鼓励您将代码分成更易读的部分。为了尽可能提高可读性,请尽量让您的代码每行执行一个操作。

python 中的一般规则是,如果表达式被括号包围,则表达式可以包含换行符,这就是为什么这个...

for ii in range(10):
    foo = 1+ 
          2+
          3

... 生成语法错误,

虽然这...

for ii in range(10):
    foo = (1+ 
          2+
          3)

...没有。

此外,由于您提到了缩进错误,请检查您是否始终使用制表符或空格进行标识。