Что делать, если столкнулись с ошибкой “TypeError: 'int' object is not subscriptable”  в Python? 

Скорее всего вы пытаетесь обратиться к переменной по индексу, подразумевая что это массив, а на самом деле в переменной записано целое число. Первым делом проверьте содержимое переменной, на которую указывает ошибка (посмотрите, на какую строку кода указывает отладчик). 

Допустим, есть картинка, и вам необходимо узнать, какое RGB значение у определенного пикселя.

Пример кода: 

from PIL import Image

img=Image.open('test.jpg')
pixelData = img.load()
print(pixelData[0,0])

print(pixelData[0,0])  выведет на экран значение первого пикселя с адресом [0, 0]  у картинки test.jpg. К примеру,  (129,177,200)

Перевести изображение в черно-белый вариант в Python достаточно просто с помощью Pillow

Пример кода: 

from PIL import Image

img=Image.open('test.jpg')
greyscaleImg = img.convert('L')
greyscaleImg.show()

где 'test.jpg' - путь до вашей картинки. 

Список возможных встроенных фильтров: 

BLUR

  • CONTOUR
  • DETAIL
  • EDGE_ENHANCE
  • EDGE_ENHANCE_MORE
  • EMBOSS
  • FIND_EDGES
  • SHARPEN
  • SMOOTH
  • SMOOTH_MORE

Пример кода, как их применять: 

img=Image.open('testimage.jpg')
new_img = img.filter(ImageFilter.SHARPEN)
new_img.show()

Не забудьте вначале импортировать библиотеки: 

from PIL import Image, ImageFilter

Тут img.filter(ImageFilter.SHARPEN) в коде вместо SHARPEN можно применить любой фильтр из списка выше. 

Документация

Чтобы в Python добавить многострочный комментарий достаточно использовать ''' в начале и в конце закомментированного кода.

Пример: 

'''
комментарий
на несколько
строк
'''

Так как в отличии от многих других языков программирования в Питоне и начало и конец закомментированного блока выглядят одинаково, то очень удобно просто переносить  '''  выше/ниже, если надо откомментировать и закомментировать одновременно рядом стоящие строки. 

Если вы встретились с ошибкой  "TypeError: f[s] is not a function" при попытке отправить форму с помощью jQuery, то в первую очередь необходимо проверить вашу форму. 

Скорее всего в ней присутствует элемент с именем name="submit", который мешает отправке формы. 

Переименуйте этот элемент и ошибка исчезнет. 

Чтобы проверить, существует ли папка, и если не существует, то создать ее), можно использовать следующую функцию:

function checkDirectory($dir){
if ( !file_exists( $dir ) && !is_dir( $dir ) ) {
mkdir( $dir );
}
}

 где $dir - дуть до папки. 

Рассмотрим на примере, когда необходимо добавить в архив содержимое всей папки:

// Get real path for our folder
$rootPath = realpath('путь до папки');

//инициализируем объект
$zip = new ZipArchive();
$zip->open('resultFile.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);

/** @var SplFileInfo[] $files */
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($rootPath),
RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $name => $file)
{
//пропускаем директории (они будут добавлены автоматически)
if (!$file->isDir())
{
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($rootPath) + 1);

//Добавляем текущий файлв архив
$zip->addFile($filePath, $relativePath);
}
}

$zip->close();

Источник

Как можно узнать в чем ошибка, если PHP функция simplexml_load_string возвращает false?

Рассмотрим на примере: 

libxml_use_internal_errors(true);
$result = simplexml_load_string("<?xml version='1.0'><root><xml></test>");
if (!$result) {
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
}

Что делать, если результат cURL выводится на страницу или в консоль, а необходимо это предотвратить? 

Все просто, достаточно добавить в параметры запуска CURLOPT_RETURNTRANSFER

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

Если вы столкнулись с ошибкой  "Start tag expected, '<' not found"  при использовании функции simplexml_load_string, то необходимо проверить следующее: 

  1. Проверить строку, которая подается в функцию simplexml_load_string - начинается ли она действительно ли нужный символ  '<'. Нет ли никаких скрытых символов в начале строки.
  2. Возможно, до того как использовать эту функцию был какой-то вывод в консоль или на страницу.

Если вы встретились с ошибкой “Array and string offset access syntax with curly braces is no longer supported”, то скорее всего перешли в старом проекте на более новую версию PHP. 

Хорошая новость в том, что исправить данную ошибку достаточно просто.

Дело в том, что в PHP теперь не поддерживается обращение к элементам массива через фигурные скобки, поэтому их надо заменить на квадратные.

Пример: 

$myArray = [1,2,3,4,5];
$myArray{2}; // Ошибка
$myArray[2]; // Правильно

Если вы встретили ошибку “PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to function set_error_handler::{closure}(), 4 passed in …”

Дело в том, что в PHP 8 на обработчик ошибки подается на 1 параметр меньше, поэтому если ваша функция принимала 5 параметров, то для php 8 необходимо последний параметр удалить, и тогда все заработает. 

Если вы столкнулись с ошибкой "The port ххх is already in use", где ххх - это любое число, то самый простой способ это сделать - это сначала узнать, какой процесс занимает данный порт, а потом завершить этот процесс. 

Как это можно сделать описано в другой статье: 

Есть несколько причин, почему может возникать данная ошибка.

Возможные решения: 

Ваш диск переполнен.

 Просто удалите какие-либо ненужные файлы, чтобы освободить место.

Проблемы с temp папкой. 

Для начала узнайте, где она располагается. Введите “echo %temp%” в консоли Windows. В ответ должен быть путь. Проверьте, что по такому пути папка существует. Важный момент - в пути не должно быть скрытых папок. К примеру, если у вас адрес “C:\Users\username\AppData\Local\Temp” - то проблема может быть с тем, что папка “AppData” является скрытой. 

Решения:  либо сделать папку видимой (правый щелчок мыши на папке → Properties → в пункте attributes снять галочку напротив hidden, возможно нужны будут права администратора). Если вы не видите саму  папку, сначала нужно включить отображение скрытых папок в системе (если не знаете как это сделать - внизу статьи будет ссылка на инструкцию).

либо поменять адрес для temp папки (правый щелчок мыши на “computer” , затем выберите в контекстном меню properties -> advanced system settings -> environment variables ->
"User variables for " в списке выберите  TEMP(и потом повторите с  TMP) и поменяйте значения к примеру на "c:\temp", только убедитесь, что такая папка у вас есть, либо создайте ее сами).

Если вы столкнулись с ошибкой Git "pre-receive hook declined", то есть несколько вариантов, почему она возникла.

Самая распространенная причина - в вашем репозитории (к примеру GitLab)  master   ветка теперь “защищена” (protected), а главная ветка - это main. 

Решения: 

  • В настройках проекта (Settings > Repository) зайдите в раздел защищенных веток "Protected branches",  найдите ветку "master"  и нажмите на сброс блокировки ("Unprotect"). 
  • Как альтернативное решение - настроить своему пользователю разрешение делать изменения в данной ветке.