使用异常作为检查是个好主意吗?

2024-10-04 11:22:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有密码:

    print('Adding user %s...' % user)
    # my own class with method
    sysacts.useradd()

    # check if user exist after been added
    try:
            pwd.getpwnam(user)
            print('Done.')
    except KeyError as e:
            print('ERROR! %s.\nExit.' %e)
            sys.exit(1)

但是-我不喜欢,那个用户不带支票就添加。 所以-我想用next重新制作:

    print('Adding user %s...' % user)

    # check if new user exist before add it
    try:
            pwd.getpwnam(user)
            print('User already present, skipping.')

    # if no user - will return KeyError: 'getpwnam(): name not found: Username'
    except KeyError as e:
            sysacts.useradd()
            print('Done.')

所以-使用KeyError作为这种检查是正常的吗? KeyError可以表示其他错误。你知道吗

如果没有-在这里检查用户的最佳方法是什么?你知道吗

例如-in create directoryblock-I made:

    # create site files directory
    dir = virt_hosts_dir + 'vhosts/' + user + '/' + domain + '/'
    print('\nCreating new directory %s' % dir)
    # if no directory - run mkdir
    if not os.path.isdir(dir):
            try:
                    sysacts.mkdir(dir)
                    print('Done.')
            except OSError as e:
                    print('ERROR: %s' %e)
                    sys.exit(2)
    # otherwise - skip
    else:
            print('Directory %s already present, skipping.' % dir)

p.S.CentOS,Python 2.6版


Tags: ifcheckasdirdirectoryprinttrykeyerror
3条回答

例外情况不适用于正在检查如果无法处理某些运行时问题,则应将用作最后一个选项。很可能在运行时捕捉到任何意外但可预见的问题。ex-db错误,i/o设备错误。所以我们除了试捕之外,没有别的办法来处理这种不正常的情况。你知道吗

但在您的情况下,您必须使用if else之类的方法来处理比较和选择。你知道吗

请记住,您必须在编码中保持代码质量和性能。你知道吗

我操作的一般规则是:

你希望它通过吗?你知道吗

  • 如果我期望一个操作在大多数情况下都会成功,我会使用异常。你知道吗
  • 如果我期望一个操作大部分时间都失败,我会用If语句截取它

如果发生的事情可能会因为失败而中断其他操作(或导致系统受损),我总是首先进行验证、验证和健全性检查。你知道吗

但是一个简单的一句话的答案是:使用异常是非常python,并没有一点不赞成。它实际上可以帮助代码更好地阅读,正如您提到的,可能还有其他异常类型,请分别捕获它们:

try:
    …
except KeyError:
    …
except TypeError:
    …
except Exception:
    …

与世界上大多数地方不同的是,Python实际上鼓励使用异常。你知道吗

他们称之为EAFP原理,引用了美国计算机科学家和美国海军少将Grace Hopper的话,他声称said,有时这比得到^{strong>permission更有效。你知道吗

在Python中有效地实现了异常,因此使用了很多异常。例如,Python中的每个for循环都通过内部抛出一个^{}异常而退出。你知道吗

相关问题 更多 >