Jython语法错误

时间:2014-05-26 07:03:27

标签: python jython

我的代码中出现语法错误。 任何人都可以说语法错了吗?

Traceback (innermost last):
  (no code object) at line 0
  File "<string>", line 867
            if (file.endsWith(".ear") || file.endsWith(".war")):
                                               ^
SyntaxError: invalid syntax

我的代码:

for file in [ears for ears in os.listdir(warPath)]:
  if (file.endsWith(".ear") || file.endsWith(".war")):
    file_list.append(file)

我有一个warpath,里面有多个war,ear和sql文件。 我的下面条件应该读取所​​有文件,如果条件应该只过滤war和ear文件并将其存储在file_list中。

1 个答案:

答案 0 :(得分:2)

您正在使用||使用or

if file.endswith(".ear") or file.endswith(".war"):

请注意,str.endswidth()方法名称​​全部小写

Jython至少支持Python 2.5,所以你可以使用元组:

if file.endswith((".ear", ".war")):

请参阅Jython string methods documentation

  

str.endswith(suffix[, start[, end]])

     

如果字符串以指定的后缀结尾,则返回True,否则返回False后缀也可以是要查找的后缀元组。使用可选的 start ,从该位置开始测试。使用可选的结束,停止在该位置进行比较。

     

在版本2.5中更改:接受元组为后缀

你的for循环看起来过于复杂;无需在列表解析中循环os.listdir()

for file in os.listdir(warPath):
    if file.endswith((".ear", ".war")):
        file_list.append(file)

但如果您可以使用列表推导,那么您可能正在使用Jython 2.7 beta,因此您也可以使file_list定义成为列表理解:

file_list = [f for f ir os.listdir(warPath) if file.endswidth(('.ear', '.war'))]

如果您使用较旧的Jython版本(例如2.1,与Websphere 8捆绑在一起),则不能使用str.endswith()的元组参数或列表推导。你不得不追加:

for fname in os.listdir(warPath):
    if fname.endswith(".ear") or fname.endswith(".war"):
        file_list.append(fname)

我在这里使用fname而不是file,这是Python中的内置名称。最好不要掩盖它。