• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Potrzebuje pomocy, nie wiem co to znaczy

VPS Starter Arubacloud
+1 głos
280 wizyt
pytanie zadane 3 marca 2022 w Python przez Qsar Nowicjusz (130 p.)

Hejka wszystkim,

Przed wczoraj usiałem do pisania prywatnego bota na discorda, możę mi ktoś powiedzieć o co chodzi w tym błędzie, chcialbym to zrozumiec lecz ang, języczne fora mi nie pomagaja ;(

Jestem nowy jak coś wiec jak są jeszcze jakieś błedy to chetnie wysłucham waszych opinii.

Tutaj macie mój kod:

import os
import aiohttp
import random
import discord
import json
from discord.ext import commands
from dotenv import load_dotenv

load_dotenv()

giphy_api = os.getenv("api_giphy")
prefix = os.getenv("/")
url = "http://upload.giphy.com/v1/gifs"


command_attrs = {'hidden': False}


class image_cog(commands.Cog, name='Fun Commands', command_attrs=command_attrs):
    def __init__(self, client):
        self.client = client
        self.session = aiohttp.ClientSession()

    def cog_unload(self):
        self.client.loop.create_task(self.session.close())

    @commands.command(name='gif')
    async def _gif(self, ctx, *, search):
        session = self.session
        embed = discord.Embed(colour=discord.Color.dark_gold())

        if search == '':
            response = await session.get('https://api.giphy.com/v1/gifs/random?api_key=' + giphy_api)
            data = json.loads(await response.text())
            embed.set_image(url=data['data']['images']['original']['url'])
        else:
            search.replace(' ', '+')
            response = await session.get('http://api.giphy.com/v1/gifs/search?q=' +search + '&api_key=' + giphy_api + '&limit=10')
            data = json.loads(await response.text())
            gif_choice = random.randint(0, 9)
            embed.set_image(url=data['data'][gif_choice]['images']['original']['url'])
            await ctx.send(embed=embed)


def setup(client):
    client.add_cog(image_cog(client))

I oto error który mi przeszkadza:

 File "c:\Users\miste\source\repos\RatujLudzi\ratuj-ludzi\discord bot\image_cog.py", line 38, in _gif
    response = await session.get('http://api.giphy.com/v1/gifs/search?q='+search +'&api_key='+giphy_api+'&limit=10')
TypeError: can only concatenate str (not "NoneType") to str

 

2 odpowiedzi

+2 głosów
odpowiedź 3 marca 2022 przez adrian17 Ekspert (344,100 p.)

Wypisz sobie zmienną `giphy_api` i zobaczysz, że jest None'm. Pewnie nie ustawiłeś zmiennej środowiskowej?

Swoją drogą,

search.replace(' ', '+')

Ta linia nic nie robi, bo metody stringa zwracają nowy string zamiast modyfikować istniejący.

komentarz 3 marca 2022 przez Qsar Nowicjusz (130 p.)
Zmienna środowiskowa jest ustawiona. Zmienna giphy_api jest usawiona w pierwszych linijkach kodu.
A co do search.replace, dzięki bardzo za podpowiedź :)
+1 głos
odpowiedź 3 marca 2022 przez VBService Ekspert (251,270 p.)

Komunikat błędu wskazuje, że któraś ze zmiennych nie ma wartości (jest "pusta" - Null - "NoneType") przez co nie można zrobić łączenia łańcuchów znaków (tekstowych)

File "c:\Users\miste\source\repos\RatujLudzi\ratuj-ludzi\discord bot\image_cog.py", line 38, in _gif
    response = await session.get('http://api.giphy.com/v1/gifs/search?q='+search +'&api_key='+giphy_api+'&limit=10')
TypeError: can only concatenate str (not "NoneType") to str
 

spróbuj sprawdzić co zawiera, search i giphy_api np. tak

...

        else:
            search.replace(' ', '+')
            print(f"search={search} , giphy_api={giphy_api}")
            response = await session.get('http://api.giphy.com/v1/gifs/search?q=' +search + '&api_key=' + giphy_api + '&limit=10')
            
            ...

 

 

P.S.  wink

response = await session.get(f"http://api.giphy.com/v1/gifs/search?q={search}&api_key={giphy_api}&limit=10")

 

1
komentarz 4 marca 2022 przez Qsar Nowicjusz (130 p.)
Dzieki wielkie za pomoc, problemem było to, że zmienna giphy_api była:

giphy_api = os.getenv("api_giphy")

A powinna być:

giphy_api = "api_giphy"

Przez os.getenv nie odczytywało mi zmiennej i kod nie działał. Teraz już wszystko śmiga :)

Podobne pytania

0 głosów
1 odpowiedź 237 wizyt
–3 głosów
1 odpowiedź 159 wizyt
–1 głos
1 odpowiedź 161 wizyt

92,455 zapytań

141,263 odpowiedzi

319,100 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...