@scp4542

Правильное использование try: except?

Есть некий огромный код
from defs import *
import os
import telebot
from telebot import types
from telebot import apihelper
import sys
import pyAesCrypt
import wget
from telebot.apihelper import ApiException
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton
import pyperclip
from admin_control import *
proxy = {'https':'https://типо прокси'}
apihelper.proxy = proxy
mongo_connect = "типо конект к монго"
mode = '1'
admins = []
main_driver_status='0'
api_token = 'типо апи ключ телеги'
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))+'/'
bot = telebot.TeleBot(api_token)
def downloit (url, path_filename):
	global proxy
	url_get = requests.get(url,proxies=proxy)
	with open(path_filename, 'wb') as f:
		f.write(url_get.content)
def rand(n):
    p=''
    sand = ['1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    for i in range(0,n):
        az = random.choice(sand)
        p+=az
    return p
admins=admin_refresh(mongo_connect)
print('yes')
@bot.message_handler(content_types=['photo'])
def get_photo_down(message):
	global ROOT_DIR, api_token
	az1=message.photo[len(message.photo)-1].file_id
	az = bot.get_file(az1).file_path
	aqe=rand(5)
	url = 'https://api.telegram.org/file/bot'+api_token+'/'+az
	path = ROOT_DIR+'results/'+aqe+'.jpg'
	downloit(url, path)
	bot.reply_to(message,f'{aqe}.jpg успешно скачен')
@bot.message_handler(content_types=['video'])
def get_video_down(message):
	try:
		global ROOT_DIR, api_token
		aqe=rand(5)
		bot.send_message(message.chat.id, f'начинаю загрузку {aqe}.mp4')
		az=bot.get_file(message.video.file_id).file_path	
		url = 'https://api.telegram.org/file/bot'+api_token+'/'+az
		path = ROOT_DIR+'results/'+aqe+'.mp4'
		downloit(url, path)
		bot.reply_to(message,f'{aqe}.mp4 успешно скачен')
	except ApiException:
		bot.reply_to(message,'файл слишком большой')
@bot.message_handler(commands=['kill_explorer','explorer_kill'])
def Kill_explorer(message):
	global ROOT_DIR
	bot.send_message(message.chat.id,'Выполняю')
	os.system(ROOT_DIR+'kill_explorer.bat')
@bot.message_handler(commands=['admins'])
def admins1(message):
	global admins
	if len(admins) == 0:
		bot.send_message(message.chat.id,'На данный момент никто не админ')
	else:
		bot.send_message(message.chat.id,'Привелегию админа имеют:')
		for adm in admins:
			bot.send_message(message.chat.id,f'{adm}')
@bot.message_handler(commands=['admins_refresh'])
def refresh_admins(message):
	global admins, mongo_connect
	if message.from_user.username in admins:
		bot.send_message(message.chat.id,'Начинаю')
		admins=admin_refresh(mongo_connect)
		bot.send_message(message.chat.id,'END')
	else:
		bot.reply_to(message, 'У вас нет прав использовать это')
@bot.message_handler(commands=['admin_add'])
def add_admin_to_bot(message):
	if message.from_user.username == 'sadxsadx':
		bot.send_message(message.chat.id,'Укажите username человека без @')
		bot.register_next_step_handler(message,dobavleniye)
	else:
		bot.reply_to(message,'у вас нет прв на выполнение этой комманды')
def dobavleniye(message):
	if message.text == '/exit':
		return
	global mongo_connect
	a13=admin_add(mongo_connect,message.text)
	userme = message.text
	if a13==1:
		bot.send_message(message.chat.id,"успешно")
	else:
		bot.send_message(message.chat.id,f'{userme} уже добавлен')
@bot.message_handler(commands=['admin_remove'])
def remove_admin_to_bot(message):
	if message.from_user.username == 'sadxsadx':
		bot.send_message(message.chat.id,'Укажите username человека без @')
		bot.register_next_step_handler(message,removing)
	else:
		bot.reply_to(message,'у вас нет прав на выполнение этой команды')
def removing(message):
	if message.text == '/exit':
		return
	global mongo_connect
	a13=admin_remove(mongo_connect,message.text)
	userme = message.text
	bot.send_message(message.chat.id,"успешно")
@bot.message_handler(commands=['status'])
def status_pic(message):
	bot.send_sticker(message.chat.id,'CAADAgADzcsAAmOLRgwk6mdSdiGvSRYE')
@bot.message_handler(commands=['driver_start','start_driver'])
def driver_start(message):
	global main_driver_status, bot
	main_driver_status=start_driver(bot , message)
	bot.send_message(message.chat.id,'OK')
	
@bot.message_handler(commands=['driver_stop','stop_driver'])
def bot_driver_stop(message):
	bot.send_message(message.chat.id,'Выключаю')
	vixod()
	bot.send_message(message.chat.id,'OK')
@bot.message_handler(commands=['driver_status','status_driver'])
def bot_driver_status(message):
	global bot
	driver_info(bot, message)
@bot.message_handler(commands=['quit','exit'])
def ut(message):
	if message.from_user.username =='sadxsadx':
		bot.send_message(message.chat.id,'Выхожу')
		vixod()
		os.abort()
	else:
		bot.reply_to(message, 'У вас нет прав использовать это')
	
@bot.message_handler(commands=['reboot'])
def reboot(message):
	if message.from_user.username == 'sadxsadx':
		bot.send_message(message.chat.id,'Будет готово')
		import subprocess
		subprocess.check_call(['shutdown', '-r' ,'-t' ,'0'])
	else:
		bot.reply_to(message, 'У вас нет прав использовать это')
@bot.message_handler(commands=['file_list'])
def list_file(message):
	global ROOT_DIR
	wd = ROOT_DIR+'results/'
	files = os.listdir(wd)
	p=''
	for file in files:
		if file == files[0]:
			p+=file+' '
		else:
			p+='| '+file+' '
	bot.send_message(message.chat.id,p)
@bot.message_handler(commands=['crypt'])
def spros_pass(message):
	global admins
	if message.from_user.username in admins:
		bot.send_message(message.chat.id,'Введи пароль')
		bot.register_next_step_handler(message, crypt)
	else:
		bot.reply_to(message, 'У вас нет прав использовать это')
def crypt(message):
	if message.text == '/exit':
		bot.send_message(message.chat.id,'Выхожу')
		return
	passw=message.text
	global ROOT_DIR
	wd = ROOT_DIR+'results/'
	files = os.listdir(wd)
	for file in files:
		uy = wd + file
		bot.send_message(message.chat.id,file)
		if uy[-4:]!='.aes':
			pyAesCrypt.encryptFile(uy,uy+'.aes', passw,64*1024)
			os.remove(uy)
		else:
			bot.send_message(message.chat.id,f'Файл {uy} уже закриптован')
	bot.send_message(message.chat.id,'Файлы закриптованы')
	
@bot.message_handler(commands=['decrypt'])
def spros_pass(message):
	if message.from_user.username in admins:
		bot.send_message(message.chat.id,'Введи пароль')
		bot.register_next_step_handler(message, decrypt)
	else:
		bot.reply_to(message, 'У вас нет прав использовать это')
def decrypt(message):
	if message.text == '/exit':
		bot.send_message(message.chat.id,'Выхожу')
		return
	passw=message.text
	print(passw)
	global ROOT_DIR
	wd = ROOT_DIR+'results/'
	files = os.listdir(wd)
	for file in files:
		uy = wd + file
		bot.send_message(message.chat.id,file)
		if uy[-4:]=='.aes':
			try:
				pyAesCrypt.decryptFile(uy,uy[:-4],passw,64*1024)
				os.remove(uy)
			except ValueError:
				bot.send_message(message.chat.id,'Неправильный пароль')
		else:
			bot.send_message(message.chat.id,f'Файл {uy} уже раскриптован')
	bot.send_message(message.chat.id,'Файлы декриптованы')

bot.polling()

как в этом коде правильно использовать try: except чтобы KeyboardInterrupt работал во всём коде, пробывал обернуть полностью, после вывода yes уже не работает (мне нужно отключить в defs драйвер когда происходит KeyboardInterrupt)
  • Вопрос задан
  • 763 просмотра
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
non progredi est regredi
маловато кода

но декомпозиция и finally могут помочь
Ответ написан
Комментировать
@Aligator69
Вопрос все еще актуален
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы