【问题标题】:Force user to input integer - not catching errors强制用户输入整数 - 不捕获错误
【发布时间】:2013-08-07 17:09:18
【问题描述】:
  1. try: 正下方的缩进行调用/引用到什么?我听说过“try: 的身体”和“try: 的表情”。请说清楚。 (见用户 - poke 的 - 答案)

  2. try:except:while:等指的是什么?像TrueFalse 被称为“声明”。 (见用户 - poke 的 - 答案)

  3. 是否有任何理由将函数 1 更改为函数 2。它们之间的唯一区别是ValueError。这些函数只应该强制用户输入一个整数。 (见用户 - poke 的 - 答案)

函数1

def get_integer(LIMIT_PROMPT):
    while True:
        try:
            return int(input(LIMIT_PROMPT))
        except:
            pass

我见过很多except statement:,如果try: 的主体/表达式中发生错误,则在正文/表达式中有一段代码会执行某些操作

我在两个程序中使用过这个特殊功能,没有遇到任何问题。

函数2

def get_integer(LIMIT_PROMPT):
    while True:
        try:
            return int(input(LIMIT_PROMPT))
        except ValueError:
            pass

【问题讨论】:

  • 我已经在其他地方得到了答案。我应该删除这个问题还是对其他人有用?
  • 如果您的问题标题是标签列表,最好将它们设为实际标签。
  • @Progrmmingisfun 保留问题,支持/接受好的答案,然后留下,以便搜索类似内容的人找到它:)

标签: python-3.x try-catch semantics infinite-loop


【解决方案1】:

Like True 和 False 被称为“语句”

TrueFalse 都是引用 bool 类型的单例值的变量。作为变量,它们是atomic expressions

tryexceptwhile 等是语句,或者更准确地说,compound statements,因为它们包含一组其他语句。通常你会将该组语句称为 block,因为在其他语言中它们被封装在块创建标记中(例如 {})。在 Python 规范中,它们被称为 suite

每个复合语句的套件实际上并没有一个特殊的名称,所以我想你可以直接称它们为“try suite”、“except suite”等,或者“try block”和“except block”。

有什么理由把这个函数改成this(唯一的变化就是ValueError)

通常,当您检查异常时,您应该尽可能具体。如果您知道在 try 块中执行的操作可能会引发 X 类型的异常,那么仅捕获/排除异常 X

不指定类型将使 except 捕获 any 异常,包括那些你可能不知道它们可能会被抛出的异常,因此你会在那里丢失有用的信息。有很多关于 SO 的问题已经处理了该主题,所以我将带您到我刚刚找到的 random one。异常管理与语言无关,因此您可以将阅读的内容应用到 Python。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 2017-10-21
    • 2022-07-01
    • 2011-07-23
    • 2010-11-19
    • 1970-01-01
    相关资源
    最近更新 更多