These are chat archives for dbwebb-se/python

25th
Oct 2017
limy17
@limy17
Oct 25 2017 09:22

Hej! Jag håller på med kmom10 och får ett felmeddelande för "help", som jag inte vet hur jag ska lösa:
"argparse.ArgumentError: argument -h/--help: conflicting option strings: -h, --help"

Koden i adventure.py:

args = cli_parse.parse_options()
helpMe = args['help']
if helpMe:
    print("Det här spelet...")
Koden i cli_parse:
parser.add_argument(
        "--help",
        action="help",
        help="Programbeskrivning"
    )
Allinrep
@pejg12
Oct 25 2017 09:24
@limy17 -h ingår automatiskt, den ska inte läggas in
limy17
@limy17
Oct 25 2017 09:24
ok!
Då får jag detta istället:
argparse.ArgumentError: argument --help: conflicting option string: --help
Allinrep
@pejg12
Oct 25 2017 09:25
samma med den, funktionaliteten ingår automatiskt i argparse
limy17
@limy17
Oct 25 2017 09:26
Så jag behöver inte lägga till help i cli_parser alltså?
Allinrep
@pejg12
Oct 25 2017 09:26
precis
limy17
@limy17
Oct 25 2017 09:27
Är det någon av dessa som redan finns också?
--info
--version
--about
--cheat
Allinrep
@pejg12
Oct 25 2017 09:27
testa dem :)
limy17
@limy17
Oct 25 2017 09:27
Ok, får väl göra det då :)
"Cheat" verkar inte fungera som det ska?
cli_parse.py:
CHEAT = "Så här fuskar du"

def parse_options():
    """Parsing options"""
    parser = argparse.ArgumentParser()

parser.add_argument(
        "-c",
        "--cheat",
        action="cheat",
        cheat=CHEAT
    )
limy17
@limy17
Oct 25 2017 09:32
I adventure:
cheatIt = args['cheat']

    if cheatIt:
        print(cheatIt)
ValueError: unknown action "cheat"
Är det för att cheat inte är inbyggt det inte fungerar som action?
lewenhagen
@lewenhagen
Oct 25 2017 09:35
@limy17 det stämmer bra
limy17
@limy17
Oct 25 2017 09:35
Så vad kan jag använda istället?
lewenhagen
@lewenhagen
Oct 25 2017 09:36
if cheatIt: print("Så här fuskar du")
limy17
@limy17
Oct 25 2017 09:38

Ok, tack. Och i cli_parse.py:

parser.add_argument(
        "-c",
        "--cheat",
        help="Så här fuskar du"
    )

... såhär?

lewenhagen
@lewenhagen
Oct 25 2017 09:38
ja det ser bra ut
limy17
@limy17
Oct 25 2017 09:38
toppen
Hur löser jag detta?
helpMe = args['help']
TypeError: tuple indices must be integers or slices, not str
Allinrep
@pejg12
Oct 25 2017 09:42
args är tydligen en tuple som inte har sträng-nycklar
print(args) så du ser vad du arbetar med
limy17
@limy17
Oct 25 2017 09:45
({'info': None, 'about': None, 'cheat': None}, [])
Allinrep
@pejg12
Oct 25 2017 09:48
( {'info': None, 'about': None, 'cheat': None }, [] )
det är en tuple med två saker, först en dictionary och sen en tom lista
limy17
@limy17
Oct 25 2017 09:49
Beror det på detta?
args, unknownargs = parser.parse_known_args()
    return vars(args), unknownargs
Tar jag bort unknownargs får jag detta:
42, in parse_options
return vars(args)
TypeError: vars() argument must have dict attribute
Allinrep
@pejg12
Oct 25 2017 09:49
ja, kommatecken skapar tupler
eller egentligen inte
du löser det genom att ha kommatecken på mottagarsidan också
ser ju ut som att args borde vara resultatet av vars(args) och unknownargs borde vara resultatet av unknownargs
limy17
@limy17
Oct 25 2017 09:51
args, unknownargs, = parser.parse_known_args()
return vars(args), unknownargs,
Men jag behöver inte unknownargs, kan jag ta bort det?
Allinrep
@pejg12
Oct 25 2017 09:52
aha, nu förstår jag
i exempelkoden från argparse-övningen så returnerar vi en dictionary som heter options, men du returnerar args direkt
det är därför det inte fungerar som du har tänkt dig nu
limy17
@limy17
Oct 25 2017 09:53
Jaha
Allinrep
@pejg12
Oct 25 2017 09:53
kolla i exempelkoden igen om du vill ha resultatet som en dictionary
limy17
@limy17
Oct 25 2017 09:56
Bra, har lagt till och initierat options nu.
Nu får jag key error:
File "adventure.py", line 17, in adv
helpMe = args['help']
KeyError: 'help'
Allinrep
@pejg12
Oct 25 2017 09:57
ja, av det du skrev förut så fanns ingen 'help'
du ska alltså inte hantera -h eller --help över huvud taget i din kod
limy17
@limy17
Oct 25 2017 09:59
Jag har bara med: helpMe = args['help']
... i adventure nu.
Allinrep
@pejg12
Oct 25 2017 09:59
varför har du med det?
limy17
@limy17
Oct 25 2017 10:00
Därför att man skulle specificera vad som skulle hända när användaren väljer help
"Skriver ut en beskrivning av programmet och vilka parameterar som fungerar."
Allinrep
@pejg12
Oct 25 2017 10:01
det finns ett krav om att -h och --help ska fungera och det kravet är automatiskt löst om du använder modulen argparse. sen finns ett annat krav om att man inne i spelet ska kunna skriva h eller hjälp (notera avsaknad av bindestreck) och det använder du inte argparse till.
limy17
@limy17
Oct 25 2017 10:02

Hur ska jag tolka detta då?
"Det skall gå att skicka in en parameter till adventure.py, enligt följande.

Kommando Vad händer
-h, --help Skriver ut en beskrivning av programmet och vilka parameterar som fungerar."

Allinrep
@pejg12
Oct 25 2017 10:02
som sagt, använder du modulen argparse så är det redan klart
det ingår i modulen
de har redan skrivit koden som sköter det
använder man en annan modul kan man behöva lägga in det manuellt
limy17
@limy17
Oct 25 2017 10:04
Alltså, hur kopplar jag en beskrivning av programmet till --help?
Allinrep
@pejg12
Oct 25 2017 10:04
testa att använda -h och se vad som händer
limy17
@limy17
Oct 25 2017 10:05

usage: adventure.py [-h] [-i INFO] [-v] [-a ABOUT] [-c CHEAT]

optional arguments:
-h, --help show this help message and exit
-i INFO, --info INFO Spelbeskrivning
-v, --version show program's version number and exit
-a ABOUT, --about ABOUT
Om Linda, spelutvecklaren
-c CHEAT, --cheat CHEAT
Så här fuskar du

Var är det tänkt att jag ska koppla --help till en beskrivning, om inte här?
Jonatan Lindblom
@jornatan
Oct 25 2017 10:08
Det är nog bara sådär som det menas
limy17
@limy17
Oct 25 2017 10:09
Men det står jag att man ska koppla en beskrivning av programmet dit?
Allinrep
@pejg12
Oct 25 2017 10:10
jag tror det räcker med argparse default. ordvalet i kravet kan vara en kvarleva från tidigare år då en annan modul användes och man faktiskt la till help manuellt.
limy17
@limy17
Oct 25 2017 10:10
Ok, då låter jag det vara så då :)
limy17
@limy17
Oct 25 2017 10:18
Hur kopplar jag en beskrivning till cheat då, som skrivs ut vid -c?
Action fungerar ju bara på förskrivna alternativ, som jag förstått det?
Allinrep
@pejg12
Oct 25 2017 10:20
gör en if-sats, kolla om cheat är satt, och använd print() för att skriva ut saker
limy17
@limy17
Oct 25 2017 11:15
Ok, så jag hoppar bara över denna del i adventure.py?
cheatIt = args['cheat']
För den ger nämligen denna error: KeyError: 'cheat'