我有一个包含以下内容的文本文件
url1,user1,xxxxxxxxx
url2,user2,yyyyyyyyy
我有一段代码应该根据传递的xxxxxxxxx
值(yyyyyyyyy
或env
)获得值prod
或test
#!/usr/bin/python
import os
class test:
def __init__(self, env):
self.env = env
def func(self):
res = []
try:
if os.path.exists("file.txt"):
try:
with open("file.txt", 'r') as fp:
for line in fp:
print("line is " +line)
line_api = line.split(',')[2]
print(line_api)
res.append(line_api)
print(res)
if self.env == "prod":
self.api = res[0]
print(self.api)
else:
self.api = res[1]
print(self.api)
except Exception as e:
print(e)
except Exception as e:
print(e)
执行else
部分时的值
list index out of range
现在,当传递的env
为prod
时,该函数起作用,但当值为test
且执行else
部分时,列表res
的值仅xxxxxx
,列表中只有一个值,并且代码self.api = res[1]
失败。 print(res)
仅打印['xxxxxxxxxxxx\n']
,但是当url
通过url1
时print(res)
仅打印['xxxxxxxxxxx \ n','yyyyyyyyyy \ n']
我的代码有什么问题?
答案 0 :(得分:1)
由于很难调试已经过多的代码,因此以下是一个简短的代码段:
使用startswith()
:
list.txt:
url1,user1,xxxxxxxxx
url2,user2,yyyyyyyyy
因此:
logFile = "list.txt"
def getUrlValue(url):
with open(logFile) as f:
content = f.readlines()
# you may also want to remove empty lines
content = [l.strip() for l in content if l.strip()]
for line in content:
if line.startswith(url):
print(line.split(',')[2])
getUrlValue("url1")
getUrlValue("url2")
输出:
xxxxxxxxx
yyyyyyyyy
答案 1 :(得分:1)
代码的问题是,您用line_api = line.split(',')[2]
拆分了每一行,并且[2]
引用了该列表中存在的第三个元素xxxxxxxxx
或{ {1}},然后在调用yyyyyyyyy
时引用该列表中的第一个(也是唯一的)元素。
self.api = res[0]
将始终抛出错误,因为它永远不会出现在1元素列表中。我不确定此else语句的目标是什么,但我建议使用DirtyBit的优雅解决方案