代码单独运行正常,但在函数中出现错误

0 投票
2 回答
1852 浏览
提问于 2025-04-17 10:30

我在代码上遇到了一些问题。我写了一个函数,用来提取参数,这个函数需要原始字符串、前后的文本片段,以及文本中出现的次数。当我用简单的代码写的时候,它运行得很好:

searchstr = 'qwer1234asdfqwer5678asdfqwer1234asdfqwer5678asdf'
startstr = 'qwer'
endstr = 'asdf'
occurancenr = 4
start = searchstr.find(startstr)
print 'start = ' + str(start)
while start >= 0 and occurancenr > 1:
  start = searchstr.find(startstr, start + len(startstr))
  occurancenr -= 1
  print 'start = ' + str(start) + ', and nr = ' + str(occurancenr)
start = start + len(startstr)
end = searchstr.index( endstr, start )
print 'result = ' + searchstr[start:end]

但是当我把它放进一个返回字符串的方法里时,就出现了错误:

这是这个函数:

  def findparam (self, searchstr, startstr, endstr, occurancenr):
  start = searchstr.find(startstr)
  while start >= 0 and occurancenr > 1:
    start = searchstr.find(startstr, start + len(startstr))
    occurancenr -= 1
  start = start + len(startstr)
  end = searchstr.index( endstr, start )
  return 'result = ' + searchstr[start:end]

这是调用这个函数的代码:

abc = 'qwer1234asdfqwer5678asdf'
aa = 'qwer'
bb = 'asdf'
print self.findparam(abc, aa, bb, 1)

错误信息看起来是这样的:

SyntaxError: ('invalid syntax', ('C:\\grinder-3.4\\scripts\\ResultCheckMerged.py', 367, 3, '  start = searchstr.find(startstr)'))
(no code object) at line 0

从技术上讲,这是一个用于磨粉脚本运行的函数,比较器使用的是jython。不过,因为没有用到java代码,只有python代码,所以我认为这是一个python的问题。但也许这和其他方面有关。

任何建议都非常感谢!

2 个回答

0

不要给定义函数的那一行加缩进。


def findparam (self, searchstr, startstr, endstr, occurancenr):
      start = searchstr.find(startstr)
      while start >= 0 and occurancenr > 1:
        start = searchstr.find(startstr, start + len(startstr))
        occurancenr -= 1
      start = start + len(startstr)
      end = searchstr.index( endstr, start )
      return 'result = ' + searchstr[start:end]
2

你只需要把代码缩进正确就可以了。下面的代码应该能正常运行:

  def findparam (self, searchstr, startstr, endstr, occurancenr):
    start = searchstr.find(startstr)
    while start >= 0 and occurancenr > 1:
      ...

撰写回答