Externa moduler i Python & webb-requests

  • Författare
  • Meddelande
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11180
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Externa moduler i Python & webb-requests

Inlägg15 okt 2014, 16:29

I kunskaps-artikeln "Använd externa moduler i Python för att hämta information på webben" visas hur du jobbar med externa moduler i Python och hur du kan hämta och bearbeta information från webbplatser in i filer och databaser.

Fråga om innehållet i artikeln eller kommentera den.
...
..:
.... /mos

david_andersson

javascriptare

  • Inlägg: 37
  • Blev medlem: 05 sep 2014, 14:05

Re: Externa moduler i Python & webb-requests

Inlägg27 nov 2014, 15:16

Hej,

Jag försökte använda mig av ditt exempel för att se om det gick att köra mitt marvinprogram genom kommandotolken. Jag lyckas på detta sätt köra mina funktioner genom att köra ./marvin-cli -v exempelvis. Men efter detta får jag meddelandet "list index out of range" vad beror detta på?

koden i den bit jag ändrat ser ut såhär (jag har alltså bytt funktionen i t.ex. -v --version till min funktion från marvin.

Kod: Markera allt
def parseOptions():
    """
    Merge default options with incoming options and arguments and return them as a dictionary.
    """

    # Switch through all options
    try:
        #global DRUM, REPEAT, VERBOSE

        opts, args = getopt.getopt(sys.argv[1:], "d:hr:sv", ["help", "version"])

        for opt, arg in opts:
            if opt in ("-d", "--drum"):
               
                shuffleLetters()

            elif opt in ("-h", "--help"):
                printUsage(EXIT_SUCCESS)



            elif opt in ("-v", "--version"):
                weightOnTheMoon()

            else:
                assert False, "Unhandled option"
   

        # Path of logfile passed as argument
        global NAME
        NAME = args[0]

    except Exception as err:
        print(err)
        print(MSG_USAGE)
        sys.exit(EXIT_USAGE)




def main():
    """
    Main function to carry out the work.
    """
    startTime = datetime.now()
   
    parseOptions()

    printMyName()
   
    timediff = datetime.now()-startTime
    #if VERBOSE:
        #sys.stderr.write("Script executed in {}.{} seconds\n".format(timediff.seconds, timediff.microseconds))
   
    sys.exit(EXIT_SUCCESS)



if __name__ == "__main__":
    main()
Användarvisningsbild

Sylvanas

dbwebb

  • Inlägg: 1133
  • Blev medlem: 16 nov 2011, 17:03
  • Ort: Karlskrona

Re: Externa moduler i Python & webb-requests

Inlägg27 nov 2014, 15:22

Vart i koden sker felet?
Brain - "Are you pondering what I'm pondering?"
Pinky - "I think so, Brain, but there's still a bug stuck in here from last time."

david_andersson

javascriptare

  • Inlägg: 37
  • Blev medlem: 05 sep 2014, 14:05

Re: Externa moduler i Python & webb-requests

Inlägg27 nov 2014, 17:53

Det blir inget felmeddelande som i error. Det som sker är att den exekverar som det ska. bara att efter att den utfört operationen skrivs det även ut "list index out of range use marvin-cli2.py --help to get usage".

Det sker alltså när jag skriver exempelvis ./marvin-cli2.py -v
Användarvisningsbild

Sylvanas

dbwebb

  • Inlägg: 1133
  • Blev medlem: 16 nov 2011, 17:03
  • Ort: Karlskrona

Re: Externa moduler i Python & webb-requests

Inlägg27 nov 2014, 18:08

Du använder en lista på 2 ställen så felet relaterar förmodligen till något av dessa 2:
Kod: Markera allt
opts, args = getopt.getopt(sys.argv[1:], "d:hr:sv", ["help", "version"])

eller
Kod: Markera allt
NAME = args[0]

Så det kan alltså bero på att du antingen inte har något på position 1 och uppåt i sys.argv eller att du inte har något på position 0 i args.
Detta kan du kanske felsöka genom att skriva ut dem innan de används och på så sätt kanske hitta vart felet faktiskt finns i din kod.
Brain - "Are you pondering what I'm pondering?"
Pinky - "I think so, Brain, but there's still a bug stuck in here from last time."
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11180
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Externa moduler i Python & webb-requests

Inlägg01 dec 2014, 12:03

I mitt exempel mynameis.py så innehåller funktionen parseOptions() en try-catch. Om något händer i den delen så kastas ett exception som "döljer" vilken rad som felet inträffar på. Tanken är att det inte skall ske oförutsedda fel, bara väl hanterade fel, i den delen av koden.

Men, när man utvecklar med exceptions så är det bra att skriva ut ett stacktrace, så ser man vilken rad som felet inträffade på.

Jag uppdaterade mittt exempelprogram mynameis.py med att ha med en rad som skriver ut detaljerad information om felet. Men raden är bortkommenterad per default, så man får ta bort kommentaren om man vill se felen.

Programmet mynameis.py med detaljerad utskrift av exception:
https://github.com/mosbth/python/blob/m ... #L147-L148
...
..:
.... /mos

pontaro

sql-kodare

  • Inlägg: 57
  • Blev medlem: 22 jan 2015, 18:42
  • Ort: Tyresö

Re: Externa moduler i Python & webb-requests

Inlägg07 apr 2015, 22:03

Hej!

När jag försöker få igång mynameis som skrivs i artikeln så får jag bara "-bash: mynameis: kommandot finns inte", och liknande meddelanden. Även när jag försöker starta med "python3 mynameis.py" blir resultatet liknande. Hur ska jag göra för att det ska gå att köra programmet?
Success consists of going from failure to failure without loss of enthusiasm.
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11180
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Externa moduler i Python & webb-requests

Inlägg08 apr 2015, 12:21

pontaro skrev:Hur ska jag göra för att det ska gå att köra programmet?


Så här gör man:
...
..:
.... /mos

pontaro

sql-kodare

  • Inlägg: 57
  • Blev medlem: 22 jan 2015, 18:42
  • Ort: Tyresö

Re: Externa moduler i Python & webb-requests

Inlägg09 apr 2015, 21:36

Hej mos,

Hmm, även fast jag skriver precis som du visar så får jag samma resultat. både ./ mynameis --help och python3 mynameis.py --help. Är det nåt som fattas?
Success consists of going from failure to failure without loss of enthusiasm.
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11180
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Externa moduler i Python & webb-requests

Inlägg10 apr 2015, 08:30

pontaro skrev:Hmm, även fast jag skriver precis som du visar så får jag samma resultat. både ./ mynameis --help och python3 mynameis.py --help. Är det nåt som fattas?


Visa en bild eller utskrift på vad du gör och vad som skrivs ut. Så att vi kan se i detalj.
...
..:
.... /mos

pontaro

sql-kodare

  • Inlägg: 57
  • Blev medlem: 22 jan 2015, 18:42
  • Ort: Tyresö

Re: Externa moduler i Python & webb-requests

Inlägg10 apr 2015, 15:54

Hej igen,

Det har löst sig. Det var något som blev fel i länkningen. När jag tog bort och gjorde om gick det bättre! Även python3 mynameis.py funkar nu, men där hade jag nog bara strulat till det själv tidigare.

Tack.
Success consists of going from failure to failure without loss of enthusiasm.

pontaro

sql-kodare

  • Inlägg: 57
  • Blev medlem: 22 jan 2015, 18:42
  • Ort: Tyresö

Re: Externa moduler i Python & webb-requests

Inlägg24 jun 2015, 16:58

Hej,

Jag har lite svårt att förstå hur getopt fungerar och undrar nu följande; varför kommer nedstående meddelande ut när man kör ./mynameis -d 5 (eller --drum 5 för den delen) i orginalkoden?

$ ./mynameis -d 5
Setting DRUM to 5
Missing name
Use mynameis --help to get usage.

Jag har även försökt sätta första NAME-parametern till en sträng men det ändrar inte utfallet. Hur fungerar det här egentligen?

Tack.
Success consists of going from failure to failure without loss of enthusiasm.
Användarvisningsbild

annettekusma

sql-guru

  • Inlägg: 102
  • Blev medlem: 11 aug 2017, 10:16
  • Ort: Eskilstuna

Re: Externa moduler i Python & webb-requests

Inlägg06 okt 2017, 00:28

Ur artikeln, delen om BeautifulSoup:
Kod: Markera allt
# Get all elements looking like <p class="irclog">
ircLog = soup.find("p", class_="irclog")


Verkar vara soup.find_all som gäller för att hitta mer än den första förekomsten. =)
Användarvisningsbild

Zeldah

dbwebb

  • Inlägg: 504
  • Blev medlem: 02 mar 2016, 10:17

Re: Externa moduler i Python & webb-requests

Inlägg06 okt 2017, 08:27

annettekusma skrev:Ur artikeln, delen om BeautifulSoup:
Kod: Markera allt
# Get all elements looking like <p class="irclog">
ircLog = soup.find("p", class_="irclog")


Verkar vara soup.find_all som gäller för att hitta mer än den första förekomsten. =)

Uppdaterat.

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 26 gäster