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',中的测试将成功,但返回语句将失败。让我们看看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
与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