1. Python / Говнокод #18135

    −94

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    # Мы хотели бы подключиться к базе данных. Мы не знаем, верны ли логин и пароль
    # Если соединение с базой будет неуспешно, то
    # Он бросит исключение. Обратите внимание, что MyDatabase и DatabaseException
    # НЕ являются реальными классами, мы просто используем их в качестве примеров.
    
    try:
        database = MyDatabase(db_host, db_user, db_password, db_database)
        database_connection = database.connect()
    except DatabaseException:
        pass
    
    if database_connection is None:
        print('The database could not connect')
    else:
        print('The database could connect')

    Часто вы хотите выполнить действие, которое может работать либо завершиться неудачно. Используя None, вы можете проверить успех действия. Вот пример:

    Запостил: 3_14dar, 09 Мая 2015

    Комментарии (20) RSS

    • if database_connection is None:
          connected = False
      else:
          connected = True
      
      if connected:
          print('The database could connect')
      else:
          print('The database could not connect')
      Ответить
      • if database_connection is None:
            pass
        else:
            connected = True
        
        if connected is None:
            print('The database could not connect')
        else:
            print('The database could connect')
        Ответить
        • connected = !(database_connection is None)
          
          print('The database could connect' if connected else 'The database could not connect')
          Ответить
    • Писала пыхомакака. Инфа 99%.
      Ответить
      • Вот какие нелепости получаются, когда программист выбирает неправильный язык! Надо было сразу писать на PHP, тогда бы это выглядело органично.
        Ответить
        • Ты прав. Тем более, что бы этот код вообще заработал, автору придётся ловить уебанское исключение:
          try:
              if database_connection is None:
                  print('The database could not connect')
              else:
                  print('The database could connect')
          except NameError:
              print('The database could not connect')

          То ли дело PHP!
          if (is_null(@$database_connection))
              print 'The database could not connect';
          else
              print 'The database could connect';

          А если использовать шаблонизатор по назначению:
          <?php if (is_null(@$database_connection)): ?>
          The database could not connect
          <?php else: ?>
          The database could connect
          <?php endif ?>
          Ответить
          • isset($database_connection) вообще-то. У них это практически идиома :)
            Кстати, isset - это не функция, а специальная конструкция языка (из-за чего раньше isset($a || $b) было fatal error), так что никаких варнингов тут прятать не надо.
            Ответить
    • Все какую-то хуйню пишут. Автор зачем-то конвертирует исключение в код возврата вместо того, чтобы использовать блок try except по назначению.

      try:
          database = MyDatabase(db_host, db_user, db_password, db_database)
          database_connection = database.connect()
          print('The database could connect')
      except DatabaseException:
          print('The database could not connect')

      Кстати, правильное замечание: оно будет не none, а отсутствовать.
      Ответить
      • Мож у него есть случай, в котором connect() вернёт none?
        Ответить
        • И MyDatabase() не кинет исклюиение? А что такое тогда DatabaseException?
          Ответить
          • Хранит параметры, кажется. А то странновато проверять пароль до подключения.
            Ответить
            • А какой от него прок тогда, если для любого действия сначала нужно вызвать connect()?
              Ответить
              • Скорее всего для пулов нужно. Чтобы несколько коннектов с одинаковыми параметрами можно было насоздавать.
                Ответить
    • а давайте так:
      class myDbConnectionFactory...
      Ответить

    Добавить комментарий