Вроде обрабатываю исключение на остановку программы
Затем все приводится к формату строки типа ключ=значение
Как можно значение оставить типа float?
import asyncio
import typing
class ThrottledResource:
def __init__(self, delay: float):
self._delay = delay
self._queue = asyncio.Queue()
self._task = None
def start(self):
self._task = asyncio.create_task(self._work_loop)
def stop(self):
self._task.cancel()
self._task = None
# этот метод вызывается клиентским кодом, получает параметры и возвращает отклик спустя время.
async def query(self, params):
future = asyncio.Future() # Future просигналит, когда наш запрос будет обслужен
await self._queue.put((future, params))
result = await future # корутина спит, пока запрос не обслужат
return result
async def _work_loop(self):
while True:
future, params = await. self._queue.get() # ждем, пока не придёт запрос
try:
result = await call_api(params) # тут делаем асинхронное обращение к сервису
except Exception as err:
future.set_exception(err) # была ошибка - теперь await future выкинет исключение
else:
future.set_result(result) # полуен результат - await future вернёт его
self._queue.task_done() # каждому успешному get() соответствует task_done()
asyncio.sleep(self._delay) # можно учесть, сколько времени делался запрос. Но стоит ли?api = ThrottledResource(delay=1.0)
api.start()
...
result = await api.query(params) # await подождёт, пока не дойдёт очередь до нашего запросаfrom sqlite import db_start, create_profile, edit_profile
from main import balanceprint(path). Сразу станет видно, что ничего не удваивается.'a\\b' - это то же самое, что и r'a\b'.for i in range(word_count, 0, -1):И можно ли его написать более компактно? Если да, то как?
part = word[a:b:c] будет (условно) эквивалентноpart = ''
i = a
while i < b:
part = part + word[i]
i = i + cc. А для отрицательного будет while i > b:.a опущено, по умолчанию это начало последовательности (для c > 0) или конец (для c < 0).b опущено, по умолчанию это конец последовательности (для c > 0) или начало (для c < 0).c опущено, по умолчанию это 1.word_reversed = word[::-1]
# это эквивалентно
word_reversed = word[len(word)-1:-1:-1] # imported_file.py
import telebot
from telebot import types
def setup(bot): # setup() принимает бота и прочее как параметры.
# да, прописываем обработчики прямо внутри setup()
# но вот глобальные переменные здесь прописывать не стоит
@bot.message_handler(content_types=['text'])
def get_text_messages(message):
...
# main_file.py
import telebot
from telebot import types
import time
import imported_file
bot = telebot.TeleBot("ТОКЕН")
# убедись, что setup() вызывается строго один раз для каждого дополнительного файла!
imported_file.setup(bot)
... # дальше работаем как обычнопросто в папке не создается таблица бд и на этом все.
создает товар и сохраняет в бд без ошибок.
sqlite3.connect('somefile.db')?somefile.db будет рассчитываться относительно текущего рабочего каталога, который может меняться в зависимости от способа запуска скрипта, да и просто в ходе его работы. А может не меняться. Т.е. нет гарантий, что текущий рабочий каталог будет совпадать с каталогом, где лежит скрипт.from pathlib import Path
import sys
SCRIPT_DIR = Path(sys.argv[0]).parent.resolve() # каталог, где лежит выполняемый скрипт
DB_PATH = SCRIPT_DIR / 'somefile.db' # путь к файлу БД в этом каталоге
conn = sqlite3.connect(DB_PATH) CREATE TABLE IF NOT EXISTS не сработает, если таблица уже существует - но и только. Если она имеет неправильную структуру, данный вызов её не пересоздаст, а оставит как есть. Проверь структуру таблицы, либо через обращение к таблице схемы (хранит структуру всех таблиц к БД), либо подцепившись клиентом к твоей БД. class Enemy:
...
def mobReturn(self):
self.x_mob = self.rect.x
class Bullet(pygame.sprite.Sprite):
def update(self):
if x_mob>=100: