我的代码中出现语法错误。 任何人都可以说语法错了吗?
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中。
答案 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中的内置名称。最好不要掩盖它。