• XSS.stack #1 – первый литературный журнал от юзеров форума

Как вы боретесь с петухоновским форматированием?

Сталкивались ли вы с ошибками типа "таб вправо, таб влево - расстрел"?

Snow

X-pert
Эксперт
Регистрация
07.02.2022
Сообщения
415
Реакции
590
Гарант сделки
13
Для автора петухона и YAML в аду приготовлен отдельный котел в котором тоже все выравнивается отступами. Сегодня в очередной раз потратил приличное время на поиск бага, связанного с ебанутым, простите, но по другому его сложно назвать, синтаксисом петухона, когда строка оказалась на один, сука, таб, правее чем это было нужно.
Вот мне и стало интересно. Я один такой, что не могу до сих пор к нему привыкнуть? Или же у меня есть таки товарищи по несчастью?
 
Для автора петухона и YAML в аду приготовлен отдельный котел в котором тоже все выравнивается отступами. Сегодня в очередной раз потратил приличное время на поиск бага, связанного с ебанутым, простите, но по другому его сложно назвать, синтаксисом петухона, когда строка оказалась на один, сука, таб, правее чем это было нужно.
Вот мне и стало интересно. Я один такой, что не могу до сих пор к нему привыкнуть? Или же у меня есть таки товарищи по несчастью?
Интерпретатор разве сразу не показывает в какой строке IndentationError ?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
не пишу на питоне, но рекомендую взять нормальный редактор/ide, который может автоматически ставить отступы.
Например, если у тебя на строке выше написано with open... : и ты жмешь enter, то логично, что на след. строке надо поставить больше отступов.
Ну и также чтобы он сам ставил отступы при переходе на след. строку. Пробелов тоже нормальное количество выбирай (хотя бы 4 наверное). При таком раскладе ошибки связанные с отступами должны сойти на минимум.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Интерпретатор разве сразу не показывает в какой строке IndentationError ?
так он пишет не про ошибку, а про баг.
Допустим у тебя есть цикл. Последняя строчка этого цикла не вошла в цикл из-за отступа. Ошибки нет, а работает неправильно.
 
я тоже считаю дебилизмом форматирование отступами, но где я, а где питон 🤷‍♂️
 
так он пишет не про ошибку, а про баг.
Допустим у тебя есть цикл. Последняя строчка этого цикла не вошла в цикл из-за отступа. Ошибки нет, а работает неправильно.
Ну так когда интерпретатор остановит работу скрипта с таким багом, он остановит с ошибкой и покажет в какой строке какая ошибка.
Баг != ошибка?
Я один такой, что не могу до сих пор к нему привыкнуть? Или же у меня есть таки товарищи по несчастью?

Форматирование табами не раздражает, принял как особенность языка
 
не пишу на питоне, но рекомендую взять нормальный редактор/ide, который может автоматически ставить отступы.
Например, если у тебя на строке выше написано with open... : и ты жмешь enter, то логично, что на след. строке надо поставить больше отступов.
Ну и также чтобы он сам ставил отступы при переходе на след. строку. Пробелов тоже нормальное количество выбирай (хотя бы 4 наверное). При таком раскладе ошибки связанные с отступами должны сойти на минимум.
мил человек, лучше PyCharm еще не придумали ничего, вот вам пример из рабочего кода
Python:
        if self.vpn_protocol == 'auto':
            vpn_protocol = self.get_vpn_protocol_from_params(params)
        else:
            vpn_protocol = self.default_vpn_protocol
            self.set_vpn_protocol(vpn_protocol)
        self.print_connection_params()
а вот еще один
Код:
        if self.vpn_protocol == 'auto':
            vpn_protocol = self.get_vpn_protocol_from_params(params)
        else:
            vpn_protocol = self.default_vpn_protocol
        self.set_vpn_protocol(vpn_protocol)
        self.print_connection_params()
найдите 10 отличий после ночи у монитора
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Баг != ошибка?
в данном контексте нет. Ты написал про IndentationError, это является синтаксической ошибкой. А тут речь про ошибку, которая возникает при работе скрипта.
Ты наверное меня неправильно понял, потому что я не уточнил, что это не ошибка синтаксиса.
Но вот кодом тс подтвердил мою догадку.
 
в данном контексте нет
В любом контексте, баг это англицизм, который обозначает ошибку,
А тут речь про ошибку, которая возникает при работе скрипта.

Но вот кодом тс подтвердил мою догадку.
как раз в коде и видно что это ошибка\баг IndentationError
 
Пожалуйста, обратите внимание, что пользователь заблокирован
В любом контексте, баг это англицизм, который обозначает ошибку,



как раз в коде и видно что это ошибка\баг IndentationError
ладно, давай по новой объясню.
Если у тебя скрипт не запускается из-за IndentationError, то это синтаксическая ошибка.
Определение слова баг из википедии:
Програ́ммная оши́бка (арго баг от англ. bug — «жук») — ошибка в программе или в системе, приводящая к неожиданному поведению программы и, как следствие, выдаче некорректного результата. Большинство программных ошибок возникают из-за ошибок, допущенных разработчиками программы в её исходном коде, либо в её дизайне. Также некоторые ошибки возникают из-за некорректной работы инструментов разработчика, например из-за компилятора, вырабатывающего некорректный код.
Ошибка приводящая к неожиданному поведению. Чтобы поведение какое-то пошло, нужно чтобы программа запустилась. При синтаксической ошибке такое невозможно.
Так что баг это про рантайм, а не про этап разбора кода интерпретатором.
 
ладно, давай по новой объясню.
Если у тебя скрипт не запускается из-за IndentationError, то это синтаксическая ошибка.
Определение слова баг из википедии:

Ошибка приводящая к неожиданному поведению. Чтобы поведение какое-то пошло, нужно чтобы программа запустилась. При синтаксической ошибке такое невозможно.
Так что баг это про рантайм, а не про этап разбора кода интерпретатором.
Догнал
 
как раз в коде и видно что это ошибка\баг IndentationError
нет
код то рабочий, он прекрасно отработал. Проблема в том, что внутри метода set_vpn_protocol выполняется несколько дополнительных проверок, если хотя бы одна из них не пройдена - устанавливается значение по умолчанию. А потом я указываю неверный протокол в подключении и не могу понять а че это за фигня, почему не работает.
 
1) Использовать PyCharm
2) После каждого изменения кода прожимать ctrl+alt+L
Это автоматически форматирует код в соответствии со стандартом.

Либо в настройках повесить форматирование на ctrl+s и форматировать будет при сохранении
 
После каждого изменения кода прожимать ctrl+alt+L
и как это мне поможет? видимо Вы не поняли сути проблемы до конца. Для IDE ошибки в коде нет, если рассматривать синтаксические ошибки. Ошибка логическая. Если в С - подобных языках по умолчанию под действие условного оператора попадает только одна строка, то в петухоне - сколько попало под таб, столько и будет.
жетбрейновскими IDE пользуюсь уже больше 10 лет, большую часть хоткеев выучил уже. но, повторюсь, здесь автоформатирование не поможет.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Пишу иногда на питоне, разные вспомогательные скрипты, сплойты и так же делал веб-приложения, но как таковым себя Python разработчиком не считаю. Что касается синтаксиса то всегда хочется добавить букву f в слове print, привычка из-за Си. Так как привык на автомате писать printf(); Еще когда переходил с Python2 на Python3 забывал про скобки. Если долго работаешь с питоном, а потом нужна опять сишка происходит затупы в написание кода. И в место привычного int var =1; Можешь случайно написать int = 1; Что касается табов и разных блоков кодов {} аналог в си, то с табами не было никогда проблем, наверно потому что комментарии в коде позволяют ориентрироваться, где какой блок кода. И так же таб должен равняться четерем пробелам.

мил человек, лучше PyCharm еще не придумали ничего, вот вам пример из рабочего кода
Python:
        if self.vpn_protocol == 'auto':
            vpn_protocol = self.get_vpn_protocol_from_params(params)
        else:
            vpn_protocol = self.default_vpn_protocol
            self.set_vpn_protocol(vpn_protocol)
        self.print_connection_params()
а вот еще один
Код:
        if self.vpn_protocol == 'auto':
            vpn_protocol = self.get_vpn_protocol_from_params(params)
        else:
            vpn_protocol = self.default_vpn_protocol
        self.set_vpn_protocol(vpn_protocol)
        self.print_connection_params()
найдите 10 отличий после ночи у монитора
Я нашел у тебя таб там в else.

Хз я в том же Си если в у нас одно условие не ставлю скобки

C:
void check_num(int number)
{
    if (number % 2 == 0)
        printf("Число %d - Четное.\n", number);
    else
        printf("Число %d - Нечетное.\n", number);
}

Нет смысла писать два лишних символа, если у нас одно выражение, было бы два можно написать скобки { }

Но иногда я настолько ленивая жопа, что не использую и вовсе { } и пишу всё через запятую, потому в си всё является выражением.

C:
void check_num(int numbers[], int size) {
    int even_count = 0, odd_count = 0;

    for (int i = 0; i < size; i++) {
        if (numbers[i] % 2 == 0)
            printf("Число %d - Четное.\n", numbers[i]),
            even_count++;
         else
            printf("Число %d - Нечетное.\n", numbers[i]),
            odd_count++;

    }

    printf("Всего четных чисел: %d\n", even_count),
    printf("Всего нечетных чисел: %d\n", odd_count);
}

Тоже самое и в питоне

Python:
def check_num(number):
    if number % 2 == 0: return "Четное"
    else: return "Нечетное"

Если одно выражение нафига писать на новой строке да и еще таб? Поэтому пишу так. Я не работаю в компании поэтому мне незачем соблюдать какие-то стандарты кодирования, поставить скобочку там, назвать переменную так. Я пишу для себя и мне как бы комфортно.
 
Я нашел у тебя таб там в else.
именно, на него я и потратил кучу времени.
то есть в одном случае значение устанавливалось корректно, в другом нет. вот и вся проблема.
Если одно выражение нафига писать на новой строке да и еще таб?
автопилот, чисто на автопилоте поставил лишний таб, не заметил. В С-подобных языках я бы даже и не заметил этого и код отработал бы корректнго. В петухоне - нет. Вот в чем соль проблемы.
у мне незачем соблюдать какие-то стандарты кодирования, поставить скобочку там назвать переменную там.
оно таки да, каждый сам под себя пишет, как удобно.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Сегодня в очередной раз потратил приличное время на поиск бага, связанного с ебанутым, простите, но по другому его сложно назвать, синтаксисом петухона, когда строка оказалась на один, сука, таб, правее чем это было нужно.
Вот, хоть кто-то меня понимает.
Да, язык мощный, умеет все, есть любые либы. Но из-за вот этого конченого синтаксиса не юзаю его дальше копировать-вставить чужой скрипт для Ида
ну сделали бы опционально скобки, так нет, петушне-разрабам языка так удобно
особенно "радует" при копировании кода с инетов, где форматирование так себе.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
автопилот, чисто на автопилоте поставил лишний таб, не заметил.
Чаще пиши комментрии, они иногда позволяют избежать ошибок с табами. И да, мне табы тоже не нравятся. Но проблем у меня таких нет. В этом плане руби круче чем питон, там полная свобода в этом плане, но мне у руби не нравятся некоторые его особенности. Если бы питон сконвертировать бы в руби, то цены не было бы этому языку и табов этих небыло бы.
 
просто в питон встроена антипетуховая манера написания кода через обязательные отступы, чтобы нельзя было писать по-ублюдкси в одну строчку 100500 команд.
Да, бывает проблема когда форматирование скажем пробелами а в одном месте стоит таб, но обычно любой вменяемый ide (даже sublime и нотпад++, не говоря уже о vscode) такое сразу выделяют.
Плюс при выполнении кода всегда пишется строчка где все пошло не оп плану. Как правило в диапазоне +- 10 строк от этого места и будет пробелма с indentation.
всем добра, пишите код читабельно)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх