-n
, когда будете вызывать команду iptables. grep
с помощью синхронной функции os.popen
, из-за чего на время выполнения команды блокируется цикл событий asyncio, и ваш бот как бы зависает. Поэтому вам следует вызывать системные команды с помощью неблокирующей функции-корутины asyncio.create_subprocess_shell
.setRand()
в вашем коде не изменяет глобальную переменную NUMBER
, а лишь создаёт локальную переменную с таким же именем, перекрывающую глобальную переменную. Добавьте следующее в функцию, чтобы она изменяла значение глобальной переменной NUMBER
:def setRand():
global NUMBER
NUMBER = random.randrange(10)
print(NUMBER)
from aiogram.dispatcher import filters
@dp.message_handler(filters.RegexpCommandsFilter(regexp_commands=['get([0-9]+)']))
async def send_welcome(message: types.Message, regexp_command):
identifier = regexp_command.group(1)
...
/get1
, /get319
, /get25
и др.Исключения — это извещения интерпретатора, возбуждаемые в случае возникновения ошибки в программном коде или при наступлении какого-либо события. Если в коде не предусмотрена обработка исключения, выполнение программы прерывается, и выводится сообщение об ошибке. Существует три типа ошибок в программе:
- синтаксические — это ошибки в имени оператора или функции, отсутствие закрывающей или открывающей кавычек и т.д. — т.е. ошибки в синтаксисе языка. Как правило, интерпретатор предупредит о наличии ошибки, а программа не будет выполняться совсем. Пример синтаксической ошибки:
>>> print("Нет закрывающей кавычки!) SyntaxError: EOL while scanning string literal
- логические — это ошибки в логике программы, которые можно выявить только по результатам её работы. Как правило, интерпретатор не предупреждает о наличии такой ошибки, и программы будет успешно выполняться, но результат её выполнения окажется не тем, на который мы рассчитывали. Выявить и исправить такие ошибки весьма трудно;
- ошибки времени выполнения — это ошибки, которые возникают во время работы программы. Причиной являются события, не предусмотренные программистом. Классическим примером служит деление на ноль:
>>> def test(x, y): return x / y >>> test(4, 2) # Нормально 2.0 >>> test(4, 0) # Ошибка Traceback (most recent call last): File "<pyshell#4>", line 1, in <module> test(4, 0) File "<pyshell#2>", line 1 in test def test(x, y): return x / y ZeroDivisionError: division by zero
Необходимо заметить, что в Python исключения возбуждаются не только при возникновении ошибки, но и как уведомление о наступлении каких-либо событий. Например, метод index() возбуждает исключение ValueError, если искомый фрагмент не входит в строку:
>>> "Строка".index("текст") Traceback (most recent call last): File "<pyshell#5>", line 1 , in <module> "Строка".index("текст") ValueError: substring not found
choice
. Если вы хотите, чтобы после нажатия кнопки оглашался результат, вынесите логику определения исхода игры в отдельную функцию и вызывайте её в обработчиках кнопок. Простейшее решение проблемы может выглядеть так:import random
from tkinter import *
window = Tk()
textgame = "Давай играть! Выбирай:\nКамень,\nНожницы,\nБумага.\n"
choiceC = random.choice(['Камень', 'Ножницы', 'Бумага'])
choice = "none"
lblr = Label(window, text="test", font=("Arial Bold", 15))
lblr.grid(column=1, row=2)
def win():
global choiceC
lblr.configure(text=choiceC + "." + " Вы победили!")
def lose():
global choiceC
lblr.configure(text=choiceC + "." + " Вы проиграли!")
def announce_outcome():
"""Определяет исход игры"""
if choice =="Камень" and choiceC =="Ножницы":
win()
elif choice =="Ножницы" and choiceC =="Бумага":
win()
elif choice =="Бумага" and choiceC =="Камень":
win()
elif choice =="Камень" and choiceC =="Бумага":
lose()
elif choice =="Ножницы" and choiceC =="Камень":
lose()
elif choice =="Бумага" and choiceC =="Ножницы":
lose()
elif choice == choiceC:
print("\n",choiceC + "." + " Ничья!")
def clickedRock():
global choice
choice = "Камень"
announce_outcome()
def clickedScissors():
global choice
choice = "Ножницы"
announce_outcome()
def clickedPaper():
global choice
choice = "Бумага"
announce_outcome()
window.title("Rock, scissors, paper with graphics")
window.geometry('400x250')
lbl = Label(window, text=textgame, font=("Arial Bold", 15))
lbl.grid(column=1, row=0)
btnr = Button(window, text="Камень", command=clickedRock)
btnr.grid(column=0, row=1)
btns = Button(window, text="Ножницы", command=clickedScissors)
btns.grid(column=1, row=1)
btnp = Button(window, text="Бумага", command=clickedPaper)
btnp.grid(column=2, row=1)
window.mainloop()
ConnectionError: Client has not been started yet
async with
:app = Client("creehk24", parse_mode=ParseMode.HTML)
def get_chat_name(chat_id)
async with app:
chat = await app.get_chat(chat_id)
if chat.type == ChatType.PRIVATE:
return f'{chat.first_name} {chat.last_name}'
else:
return chat.title
Client.start()
и Client.stop()
:app = Client("creehk24", parse_mode=ParseMode.HTML)
def get_chat_name(chat_id)
await app.start()
chat = await app.get_chat(chat_id)
await app.stop()
if chat.type == ChatType.PRIVATE:
return f'{chat.first_name} {chat.last_name}'
else:
return chat.title
$ apt show iwd
maxsplit=1
:@dp.message_handler(commands=['r'])
async def r(message: types.Message):
args = message.get_args().split(maxsplit=1)
if len(args == 2):
user_id, msg = int(args[0]), args[1]
await dp.bot.send_message(user_id, msg)
def get_next_hostname(hostname):
for vm in asl_vms:
hostname = vm['name']
service, x, name = hostname.split('-')
number = int(name.split('.')[0])
y = '{}-{}-{}.node.eu.consul'.format(service, x, number + 6)
return y, service
hostname.split('-')
вы можете использовать только в том случае, если уверенны, что в результате разбиения строки получается список именно из трёх элементов — не больше и не меньше. pip install --upgrade aiogram
from datetime import date, datetime
from pydantic import BaseModel, validator
class Person(BaseModel):
first_name: str
last_name: str
bdate: date
@validator('bdate', pre=True)
def bdate_from_string(cls, v):
if isinstance(v, str):
return datetime.strptime(v, '%Y%m%d').date()
return v
data = {
'first_name': 'Adam',
'last_name': 'Smith',
'bdate': '20220617'
}
person = Person(**data)
print(person)
-loglevel quiet
в ffmpeg. if '/' not in msg.text or '\\' not in msg.text or '|' not in msg.text:
if '/' not in msg.text or r'\' not in msg.text or '|' not in msg.text: