Python 如何修复内置项。ValueError:未找到子字符串

Python 如何修复内置项。ValueError:未找到子字符串,python,python-3.x,Python,Python 3.x,str.index如果找不到您要查找的值,则会引发ValueError。如果字符串是'orange'并且在索引2后查找'o',中的测试将成功,但返回语句将失败。让我们看看pythonstr.index()方法: str.index(str,beg=0 end=len(string)) 在函数中,puzzle.index(letter,index)将从index位置查找字母,因此如果letter出现在index之前,则代码将引发ValueError 如何修复它: def update_letter

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

让我们看看python
str.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
与find()类似,但在未找到子字符串时引发ValueError

这就是发生
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
您可能会争辩说您正在做的是
如果拼图中的字母
,那么错误永远不会发生。但是您的
索引(字母,**索引**)
会发生变化,因为搜索应该从哪里开始的开始索引可能不包含字母

Ex:

   >>> 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
>>puzzle=“abcdef”
>>>拼图索引('c')
=>  2
>>>拼图索引('c',5)#这里的beg=5
=>回溯(最近一次呼叫最后一次):
文件“python”,第1行,在
ValueError:未找到子字符串

请给出运行代码的示例。什么输入导致ValueError?@Code学徒你好,我在帖子开头上传了一张图片。这是一个演示,展示了这段代码的工作原理。代码实际上是我整个项目的一部分。当我放置S(如果我的拼图在图片中是相同的),那么我将得到ValueError。这不只是检查
字母
是否位于
拼图的索引
索引
?如果是这样的话,一个更直观的方法就是
If puzzle[index]==letter:return letter
。检查字母是否在拼图中没有任何帮助-仅仅因为它存在并不意味着它在正确的索引中。@标记如果您将错误的索引(即索引>len(拼图))传递给函数调用会发生什么?@HuyVo我不是说这是完整的解决方案。那就差不多了。可以使用try-catch块,也可以在此函数之外处理异常。我添加了一张图片,显示了此代码的工作方式。你知道我应该如何修复代码以使其按预期工作吗?我做到了吗?老兄,我很抱歉,实际上你的代码正在按预期工作。如果我那样做了,我道歉。这应该是一个错误-click@guanyuma不,是其他人,因为你的帐户可能没有第四行的否决权?我不确定如果字母出现在索引之前,它会给出一个错误well@guanyuma你能提供一个引起错误的例子吗?>>更新字母视图('chicken','ch^^ken',3,'i')试试这个,把你刚才提供给我的def代码放进去。很抱歉,我没有学会代码,除了。所以我不知道怎么用你的方式做。但是谢谢你回答我的问题,如果我知道如何用你的方式去做,我相信它会解决我的问题。谢谢你,兄弟,正如我说的,使用
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
   >>> 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