#python #python-3.x #discord #discord.py #discord.py-rewrite
#python #python-3.x #Discord #discord.py #discord.py-переписать
Вопрос:
Мой код работает, но когда я включаю команду pay ‘all’, она, похоже, выдает мне ошибку. Я хочу, чтобы бот в основном, когда я говорю ему «.pay @example #0001 all», он выбирает все ‘bal’
МОЙ КОД:
@client.command(aliases=['send'])
async def pay(ctx, member : discord.Member, amount = None):
await open_account(ctx.author)
await open_account(member)
if amount == None:
await ctx.send('Please enter the amount')
return
bal = await update_bank(ctx.author)
amount = int(amount)
if amount == 'all': #This
amount = bal[0] #Wont work
if amount>bal[1]:
await ctx.send('You do not have that much money!')
return
if amount<0:
await ctx.send('Amount must be positive!')
return
await update_bank(ctx.author,amount, 'wallet')
await update_bank(member,-1*amount,'bank')
await ctx.send(f'{ctx.author.mention} Payed {amount} coins! How generous!')
ОШИБКА:
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: ValueError: invalid literal for int() with base 10: 'all'
Комментарии:
1. Вы не можете проверить наличие строки после попытки преобразования в int, потому что, если это неверное число, то уже слишком поздно. В любом случае вам нужно будет защититься от исключения, на случай, если пользователь введет какой-либо другой вид мусора.
Ответ №1:
Измените это:
amount = int(amount)
if amount == 'all': #This
amount = bal[0] #Wont work
К этому:
if amount == 'all': #This
amount = bal[0] #Wont work
else:
try:
amount = int(amount)
except ValueError:
await ctx.send(f'Invalid amount({amount}) Must be "all" or an integer')
return
Идея здесь в том, что вы хотите проверить, отправлено ли «все», и если нет, попробуйте преобразовать его в целое число. Если вы не можете выполнить приведение к int(), вы получите ValueError, как вы отметили. Поймайте ошибку ValueError, а затем ответьте сообщением пользователю.
Ответ №2:
Измените это:
if amount == None:
await ctx.send('Please enter the amount')
return
bal = await update_bank(ctx.author)
amount = int(amount)
if amount == 'all': #This
amount = bal[0] #Wont work
Для:
bal = await update_bank(ctx.author)
if amount == 'all':
amount = bal[0]
else:
try:
amount = int(amount)
except ValueError:
await ctx.send(f'Invalid amount({amount}) Must be "all" or an integer')
return
amount = int(amount) #This has to be after we define "amount == 'all'"
#THE REST OF THE CODE