【问题标题】:How do I write a code that says: "if I can do this, do this. Otherwise do nothing", in Python 2.7?如何在 Python 2.7 中编写代码:“如果我能做到这一点,就这样做。否则什么都不做”?
【发布时间】:2016-03-31 00:33:52
【问题描述】:

如何在 Python 2.7 中编写代码:“如果我能做到这一点,就这样做。否则什么都不做”?

我在下面添加了不起作用的代码。

words = ["glad", "lycklig", "fin", "vacker", "sot", "blomming"]

word_index = words.index("sot")
focus_word = words[word_index]
tre = words[word_index+1]
if words[word_index+2] == True:
    fyra = words[word_index+2]
else:
    print "the list is not long enough"

所以我想得到“sot”之后的两个单词,如果有的话。在这种情况下没有,然后我只想跳过该命令。

【问题讨论】:

  • 您的if 子句不正确:if words[word_index+2] == True:。这相当于检查words[word_index+2] 是否等于boolean True,这只是......不可能,哈哈。试试if words[word_index+2]:
  • Tacocat 是对的,但我认为要保持逻辑开关保持不变,您需要if words[word_index + 2]:。另请注意,您必须正确缩进打印语句。 Python 关心空格。
  • @tyleha 我的错,哈哈!我已经编辑了我的评论。感谢您指出! :3 反身 :S

标签: list python-2.7 if-statement


【解决方案1】:

有两种通用的“哲学”来避免 Python 代码中的错误。

一个,被称为“跳前检查”(LBYL)表示,在执行任何依赖于该正确性的操作之前,您应该检查所操作的值是否正确。这是一种很好的方法,错误不是明显的错误,例如异常,而是在给出无效输入时得到无效答案的地方。

对于您的代码,在代码中进行此类检查的最佳方法是使用if word_index + 2 < len(words) 直接检查您要查找的索引是否太大。

另一种避免错误的设计实际上并没有完全避免它们,而是让错误发生并在之后处理它们。这被称为“请求原谅比许可更容易”(EAFP),通常涉及 Python 中的 tryexcept 块。

对于您的代码,您可以使用此代码捕获IndexError,如果word_index+2 不在words 列表的末尾,则会引发该问题:

try:
    fyra = words[word_index+2]
except IndexError:
    print "No such value"

不过,您可能需要更多逻辑,因为如果您遇到 except 案例,则不会定义 fyra。您可能希望使用 sys.exit() 退出或将 fyra 设置为 except 末尾的某个默认值,而不仅仅是打印错误消息。

请注意,仔细考虑您在except 子句中捕获的异常非常重要。在大多数情况下,您不想捕获所有错误(仅使用except:),因为这会隐藏真正应该使程序崩溃并显示堆栈跟踪的意外错误(因此您可以修复导致它们发生的错误)。通常最好捕获最具体的异常类型,并将try 包裹在尽可能小的代码块周围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2019-07-25
    • 2022-11-09
    • 2010-11-03
    • 1970-01-01
    相关资源
    最近更新 更多