Else 的语法无效:3.8

Posted

技术标签:

【中文标题】Else 的语法无效:3.8【英文标题】:Invalid syntax of Else: 3.8 【发布时间】:2020-03-30 12:03:17 【问题描述】:

我是 python 脚本的新手,想知道如何修复下面的代码。我想知道如何解决Invalid Syntax of Else语句,谢谢!

import os
import zipfile

f = open("filelist.txt","w+")
path=("pathtofile")
directory=os.fsencode(path)
filenames = []
for file in os.listdir(directory):
    filename = os.fsdecode(file)
    if filename.endswith(".zip"):
        with zipfile.ZipFile(filename, 'r') as zipObj:
            contents = zipObj.namelist()

    listfile = (str(contents))
    remchar = "'[]"
    for char in remchar:
            a = listfile.replace(char,"")
    f.write (a)
    continue
    else:
        pass

    f.close()

【问题讨论】:

这是您代码的实际缩进吗? 是否应该将我们的代码(如listfileremchar)以及您的 for 循环缩进到我们的 if 语句中?如果不是,那么您需要将 else 移到它们上方,以便在同一缩进的 if 下一行代码之后是您的 else if 语句在您没有缩进 listfile = ... 时结束。 else 应该属于什么? 如果您是新手,您可能希望从官方 Python 教程开始。您的else: 错误的解决方案在docs.python.org/3/tutorial/controlflow.html#if-statements - 下一次,请发布完整的回溯。一方面,它准确地告诉我们错误发生在哪一行。 (它可能会告诉我们更多信息,因此请不要省略您不了解其需要的任何内容。) 【参考方案1】:

请记住,python 中的缩进很重要。您的 else: 语句在同一级别上没有匹配的 if 语句。确保正确缩进以实现您要查找的内容:

if filename.endswith(".zip"):
    with zipfile.ZipFile(filename, 'r') as zipObj:
        contents = zipObj.namelist()

        listfile = (str(contents))
        remchar = "'[]"
        for char in remchar:
            a = listfile.replace(char,"")
            f.write (a)
        continue
else:
    pass

【讨论】:

【参考方案2】:

else 语句位于if 语句的末尾之外。您必须在结束另一个 else 后立即添加一个 else。是这样的:

if filename.endswith(".zip"):
    with zipfile.ZipFile(filename, 'r') as zipObj:
        contents = zipObj.namelist()
else:
    pass

如果你只是写pass,那么你可以直接省略else

【讨论】:

以上是关于Else 的语法无效:3.8的主要内容,如果未能解决你的问题,请参考以下文章

spyder IDE 上的无效语法 (pyflakes E)

arangoimport:边缘属性缺失或无效

为啥我在使用带有 c# XPathNavigator Evaluate 的 Xpath if-then-else Expression 时得到一个无效的令牌?

Podfile 无效语法错误

Spyder 中的无效语法

Lambda 无效语法