【问题标题】:How can I fix builtins.ValueError: substring not found如何修复 builtins.ValueError: substring not found
【发布时间】:2017-10-01 05:03:52
【问题描述】:

puzzle gameValueError 的一些输入。谁能帮我解决一下,好吗?

def update_letter_view(puzzle: str, view: str, index: int, letter: str) -> str:

>>>"""Return a single character string representing the next view of the 
character at the given index.If the character at that index
of the puzzle matches the guess, then return that character. Otherwise, 
return the character at that index of the view.

>>>update_letter_view('chicken', 'ch^^ken', 2, 'i')
'i'
>>>update_letter_view('banana', 'b^n^n^', 1,'t')
'^'
"""
symbol = '^'
if letter in puzzle:
    return puzzle[puzzle.index(letter, index)]
return symbol

【问题讨论】:

  • 请展示运行代码的示例。哪些输入会导致 ValueError?
  • @Code-Apprentice 嗨,我在帖子开头上传了一张图片。这是一个演示,展示了此代码打算如何工作。代码实际上是我整个项目的一部分。当我输入 S 时(如果我的拼图在图片中相同),那么我会得到 ValueError。
  • 这不只是检查letter 是否在puzzle 的索引index 上吗?如果是这样,更直观的方法是if puzzle[index] == letter: return letter。检查字母是否在拼图中没有任何帮助 - 仅仅因为它存在并不意味着它在正确的索引处。
  • @Mark 如果向函数调用传递了错误的索引(即 index > len(puzzle))怎么办?
  • @HuyVo 我并不是说这是完整的解决方案。那将类似于this。可以改用 try-catch 块或处理此函数之外的异常。

标签: python python-3.x


【解决方案1】:
string.index(s, sub[, start[, end]])

类似于 find() 但引发 ValueError when the substring is not found.

这是您的ValueError 将出现的地方。要解决此问题,请使用try/except

def update_letter_view(puzzle: str, view: str, index: int, letter: str) -> str:
   symbol = '^']

   try:
      if letter in puzzle:
         return puzzle[puzzle.index(letter, index)]
   except:
      #do something else

   return symbol

你可能会争辩说你正在做 if letter in puzzle ,所以这个错误永远不会发生。但是您的index(letter,**index**) 改变了一些事情,因为搜索应该开始的开始索引可能不包含该字母。

例如:

   >>> puzzle="abcdef"
   >>> puzzle.index('c')
   =>  2
   >>> puzzle.index('c', 5)                    #beg=5 here
   =>  Traceback (most recent call last):
       File "python", line 1, in <module>
       ValueError: substring not found

【讨论】:

  • 对不起,除了代码我没学过。所以我不知道该怎么做。但是感谢您回答我的问题,如果我知道如何以您的方式进行操作,我相信它会解决我的问题。谢谢兄弟。
  • 嗯,正如我所说,使用 try/except 。我什至写了代码sn-p。查一下,很有帮助。
  • 当然。很高兴能提供帮助。
【解决方案2】:

我们来看看pythonstr.index()方法:

str.index(str, beg=0 end=len(string))

在你的函数中,puzzle.index(letter, index) 会从index 的位置找到字母,所以很明显如果letter 出现在index 之前,你的代码将引发ValueError

如何解决:

def update_letter_view(puzzle, view, index, letter):
    symbol = '^'
    if letter in puzzle and puzzle.index(letter) == index:
        symbol = letter
    return symbol

【讨论】:

  • 我这样做了吗?伙计,我很抱歉实际上您的代码正在按预期工作。如果我这样做了,我道歉。应该是误点击
  • @guanyuma 不,是其他人,因为您的帐户还没有投票权
  • 可能在第 4 行?我不确定如果字母出现在索引之前,它似乎也会出错
  • @guanyuma 你能提供一个引发错误的例子吗?
  • >>> update_letter_view('chicken', 'ch^^ken', 3, 'i') 试试这个,把你刚刚提供给我的def码放上去。
【解决方案3】:

str.index 如果找不到您要查找的值,则会引发 ValueError。如果您的字符串是 'orange' 并且您在索引 2 之后查找 'o',则 in 测试将成功,但返回语句将失败。

【讨论】:

  • 我添加了一张图片,显示了这段代码打算如何工作。您知道我应该如何修复代码以使其按预期工作吗?
猜你喜欢
  • 2015-10-13
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 2020-04-10
  • 2020-01-09
  • 2014-02-08
  • 2012-03-30
  • 2019-09-14
相关资源
最近更新 更多