我很好奇用 while 循环处理这个错误的“正确”pythonic 方法是什么。在这个例子中,我可以简单地检查字符串,看看它是否事先有一个 [-1] 字符,但是我的问题的这个例子所基于的实际代码要复杂得多。
try:
while mystring[-1] == '!' #Will throw an error if mystring is a blank string
print("Exclamation!")
mystring = mystring[:-1]
return mystring
except:
return ""
实际上,我的问题是我的 while 循环取决于检查,偶尔在循环内进行一些处理后,会抛出错误。以上只是该问题的(可能过度)简化说明。我通过一系列 try: excepts: 修复了它,但我觉得这不是解决此问题的“正确”方法。
请您参考如下方法:
您当前的代码做了两件您不应该做的事情:
- 捕获任何异常,您应该只捕获感兴趣的特定异常
- 在 try block 中包含整个循环,如果可能的话,您应该只包含引发异常的语句/表达式
如果您发现自己在 Python 中大量使用 while 循环,则表明您没有最有效地使用 Python。鉴于 python 的工具集,你应该几乎总是使用某种 for 循环。没有看到您的代码的真实示例,我不能说这是否真的如此。如果您需要该领域的帮助,请在 http://codereview.stackexchange.com 上发布一些代码
这个问题的一般解决方案是编写一个处理异常的函数并使用它。
def last_character(string):
try:
return string[-1]
except IndexError:
return ' '
while last_character(mystring) == '!'
mystring = mystring[:-1]
return mystring
事实上,在许多情况下,已经有了标准构造的无异常等价物。使用 .endswith() 方法可以轻松编写此循环。通过使用它们或自己制作,您可以最干净地处理异常。
