Вылетает ошибка "mremap_chunk(): invalid pointer Aborted" Python
Я реализовываю не сложного телеграмм бота (Python, telegrambotapi), который высчитывает матрицу человека или что-то вроде того (сам особо не вникал в эту тему, просто знаю алгоритм).
И при совершенно случайных обстоятельствах вылетает следующая ошибка ("mremap_chunk(): invalid pointer Aborted"). Я искал ответ на вопрос на просторах интернета, но ситуации у людей были совершенно иными и я не мог их переложить под мой код. Я настолько отчаялся, что, вот впервые, решил написать сюда.
В чем суть данного алгоритма
- (В это функции вроде все работает окей) В первой функции в качестве аргумента выступает дата рождения в формате день, месяц, год при этом число может быть введено разными способами, например 18-10-1999 или 23/02/2022 или 21.02.2001. Думаю понятно. Также месяц может быть введен в формате текста, тогда он должен будет измениться в число. Ф-ция возвращает переменную dir которая имеет следующие коды:
- 1 - все ок
- 3 - некорректный ввод числа
- 4 - некорректный ввод года
- 5 - некорректный ввод месяца
- (Вот тут я думаю таится корень зла) Эта функция считает 4 доп числа
- 1 - это сумма всех цифр даты рождения
- 2 - это сумма всех цифр 1 доп. числа
- 3 - разность первого доп. числа и удвоенной первой цифры даты рождения
- 4 - это сумма всех цифр 3 доп. числа
Далее происходит подсчет каждой ячейки (s1 - 1 ячейка, s2 - 2 ячейка и т.д до 9) Первая ячейка это все единицы из даты рождения и доп чисел.
Так например для 17.10.2000 первая ячейка = 1111 так как в дате рождения 2 единицы и в доп. числах (11, 2, 9, 9) тоже 2 единицы
Для второй и остальных ячеек до 9 аналогичная ситуация
Другие ячейки там видно что это сумма количества цифр по вертикали, горизонтали и по диагонали
Вот скрин одной из таблиц посчитанных данным алгоритмом (зеленые линии (s10 - s12) (вертикаль), желтые линии (s13 - s15) (горизонталь), фиолетовые линии (s16 - s17) (горизонталь)) одна из таблиц посчитанная данным алгоритмом
Надеюсь алгоритм понятно объяснил, если что, заранее простите и я готов ответить на все вопросы
Также я ниже предоставлю код скрипта генерирующего изображение, видел что это ошибка и при работе с Pillow возникала, вдруг там мой косяк.
Вот сам код (знаю, выглядит очень некрасиво, сам себя за это ругаю, но я спешил)
calc.py - алгоритм расчета матрицы
import re
import pic_generate
def check_date(date):
day = re.split("[;|,|.|\n|_|-| |/|-]", date)
try:
int(day[0])
except:
return 3, 1
try:
int(day[2])
except:
return 4, 1
if day[1].lower() == 'января':
day[1] = 1
return 0, day
elif day[1].lower() == 'февраля':
day[1] = 2
return 0, day
elif day[1].lower() == 'марта':
day[1] = 3
return 0, day
elif day[1].lower() == 'апреля':
day[1] = 4
return 0, day
elif day[1].lower() == 'мая':
day[1] = 5
return 0, day
elif day[1].lower() == 'июня':
day[1] = 6
return 0, day
elif day[1].lower() == 'июля':
day[1] = 7
return 0, day
elif day[1].lower() == 'августа':
day[1] = 8
return 0, day
elif day[1].lower() == 'сентября':
day[1] = 9
return 0, day
elif day[1].lower() == 'октября':
day[1] = 10
return 0, day
elif day[1].lower() == 'ноября':
day[1] = 11
return 0, day
elif day[1].lower() == 'декабря':
day[1] = 12
return 0, day
else:
try:
int(day[1])
return 0, day
except:
return 5, 1
def calc(date):
firstDopNum = sum(map(int, str(
date[1]))) + sum(map(int, str(date[0]))) + sum(map(int, str(date[2])))
secondDopNum = sum(map(int, str(firstDopNum)))
thirdDopNum = firstDopNum - (int(str(int(date[0]))[0])*2)
fourthDopNum = sum(map(int, str(thirdDopNum)))
allNum = str(date[2]) + str(date[1]) + str(date[0]) + \
str(firstDopNum) + str(secondDopNum) + \
str(thirdDopNum) + str(fourthDopNum)
s1 = re.sub("[2|3|4|5|6|7|8|9|0]", "", allNum)
s2 = re.sub("[1|3|4|5|6|7|8|9|0]", "", allNum)
s3 = re.sub("[2|1|4|5|6|7|8|9|0]", "", allNum)
s4 = re.sub("[2|3|1|5|6|7|8|9|0]", "", allNum)
s5 = re.sub("[2|3|4|1|6|7|8|9|0]", "", allNum)
s6 = re.sub("[2|3|4|5|1|7|8|9|0]", "", allNum)
s7 = re.sub("[2|3|4|5|6|1|8|9|0]", "", allNum)
s8 = re.sub("[2|3|4|5|6|7|1|9|0]", "", allNum)
s9 = re.sub("[2|3|4|5|6|7|8|1|0]", "", allNum)
s10 = int(len(s1)) + int(len(s2)) + int(len(s3))
s11 = int(len(s4)) + int(len(s5)) + int(len(s6))
s12 = int(len(s7)) + int(len(s8)) + int(len(s9))
s13 = int(len(s1)) + int(len(s4)) + int(len(s7))
s14 = int(len(s2)) + int(len(s5)) + int(len(s8))
s15 = int(len(s3)) + int(len(s6)) + int(len(s9))
s16 = int(len(s1)) + int(len(s5)) + int(len(s9))
s17 = int(len(s3)) + int(len(s5)) + int(len(s7))
varList = [s1, s2, s3, s4, s5, s6, s7, s8, s9,
s10, s11, s12, s13, s14, s15, s16, s17, firstDopNum, secondDopNum, thirdDopNum, fourthDopNum]
for i in range(0, len(varList)):
if varList[i] == '':
varList[i] = 'Пусто'
elif varList[i] == 0:
varList[i] = 'Пусто'
sudba = int(firstDopNum)
while True:
if sudba == 11 or sudba == 22:
break
elif len(str(sudba)) >= 2:
sudba = int(str(sudba)[0]) + int(str(sudba)[1])
elif len(str(sudba)) == 1:
break
varList.append(sudba)
pic_generate.create_img(varList)
return varList
отрывок main.py - работа с ботом
@bot.message_handler(commands=['calc'])
def begin_calc(message):
user = config.MessageList(message.from_user.username,
message.from_user.first_name, message.from_user.last_name)
msg = bot.send_message(message.chat.id, user.info_message(
'begin_calc_msg'), reply_markup=keyboards.calcKB_1, parse_mode="Markdown")
bot.register_next_step_handler(msg, birthday_calc)
def birthday_calc(message):
date = message.text
dr, res = calc_matrica.check_date(date)
if dr == 3:
bot.send_message(message.chat.id, '❌ Вы некорректно ввели ваше число!')
bot.delete_message(chat_id=message.chat.id,
message_id=message.message_id-1)
begin_calc(message)
elif dr == 4:
bot.send_message(
message.chat.id, '❌ Вы некорректно ввели год рождения!')
bot.delete_message(chat_id=message.chat.id,
message_id=message.message_id-1)
begin_calc(message)
elif dr == 5:
bot.send_message(message.chat.id, 'Вы некорректно ввели месяц рождения!')
bot.delete_message(chat_id=message.chat.id,
message_id=message.message_id-1)
begin_calc(message)
elif dr == 0:
bot.send_message(message.chat.id, f'Ваша дата рождения: {res[0]}.{res[1]}.{res[2]}\n\nЗагружаю матрицу...')
print(res)
data = calc_matrica.calc(res)
bot.send_photo(message.chat.id, open('matrica.png', 'rb'),
reply_markup=keyboards.calcKB_2)
bot.polling()
pic_generate.py - создание изображения
from PIL import Image, ImageDraw, ImageFont
def create_img(res):
im = Image.open('shabl.png')
print(res)
font = ImageFont.truetype("OpenSans-Light.ttf", 25)
drawer = ImageDraw.Draw(im)
drawer.text((50,10), f'Доп. числа: {res[17]} {res[18]} {res[19]} {res[20]}', font=font, fill='black', align='center')
drawer.text((531, 10), 'Темперамент', font=font, fill='black', align='center')
drawer.text((50, 45), 'Число судьбы: ' +str(res[21]), font=font, fill='black', align='center')
drawer.text((531, 50), str(res[16]), font=font, fill='black', align='center')
drawer.text((50,90), 'Характер', font=font, fill='black', align='center')
drawer.text((237, 90), 'Здоровье', font=font, fill='black', align='center')
drawer.text((394, 90), 'Удача', font=font, fill='black', align='center')
drawer.text((50,130), str(res[0]), font=font, fill='black', align='center')
drawer.text((237, 130), str(res[3]), font=font, fill='black', align='center')
drawer.text((394, 130), str(res[6]), font=font, fill='black', align='center')
drawer.text((531, 90), 'Цель', font=font, fill='black', align='center')
drawer.text((531,130), str(res[9]), font=font, fill='black', align='center')
drawer.text((50,170), 'Энергия', font=font, fill='black', align='center')
drawer.text((237, 170), 'Логика', font=font, fill='black', align='center')
drawer.text((394, 170), 'Долг', font=font, fill='black', align='center')
drawer.text((50,210), str(res[1]), font=font, fill='black', align='center')
drawer.text((237, 210), str(res[4]), font=font, fill='black', align='center')
drawer.text((394, 210), str(res[7]), font=font, fill='black', align='center')
drawer.text((531, 170), 'Семья', font=font, fill='black', align='center')
drawer.text((531,210), str(res[10]), font=font, fill='black', align='center')
drawer.text((50,250), 'Интерес', font=font, fill='black', align='center')
drawer.text((237, 250), 'Труд', font=font, fill='black', align='center')
drawer.text((394, 250), 'Память', font=font, fill='black', align='center')
drawer.text((50,290), str(res[2]), font=font, fill='black', align='center')
drawer.text((237, 290), str(res[5]), font=font, fill='black', align='center')
drawer.text((394, 290), str(res[8]), font=font, fill='black', align='center')
drawer.text((531, 250), 'Привычки', font=font, fill='black', align='center')
drawer.text((531,290), str(res[11]), font=font, fill='black', align='center')
drawer.text((50,330), 'Самооценка', font=font, fill='black', align='center')
drawer.text((237, 330), 'Быт', font=font, fill='black', align='center')
drawer.text((394, 330), 'Талант', font=font, fill='black', align='center')
drawer.text((50,370), str(res[12]), font=font, fill='black', align='center')
drawer.text((237, 370), str(res[13]), font=font, fill='black', align='center')
drawer.text((394, 370), str(res[14]), font=font, fill='black', align='center')
drawer.text((531, 330), 'Духовность', font=font, fill='black', align='center')
drawer.text((531,370), str(res[15]), font=font, fill='black', align='center')
im.save('matrica.png')
Сама ошибка
mremap_chunk(): invalid pointer
Aborted
Даже строки где ошибка не пишет (((((
Доп инфа
- библиотека генерации изображения - Pillow
- библиотека для работы с ботом - telegrambotAPI
- библиотека re - для работы со строкой
- разворачиваю все на хосте - pythonanywhere
Заранее всем спасибо за помощь!