Kmom05 -h fungerar ej

  • Författare
  • Meddelande

anna7

css-hackare

  • Inlägg: 26
  • Blev medlem: 21 aug 2017, 09:17

Kmom05 -h fungerar ej

Inlägg18 okt 2017, 19:32

Hej!

När jag försöker köra "main.py -h" i terminalen så får jag följande error message:

Kod: Markera allt
Traceback (most recent call last):
  File "main.py", line 115, in <module>
    main()
  File "main.py", line 28, in main
    opts = cli_parser.parse_options()
  File "/cygdrive/c/Users/Anna/dbwebb-kurser/python/me/kmom05/analyzer/cli_parser.py", line 55, in parse
    arg, unknown_args = parser.parse_known_args()
  File "/usr/lib/python3.6/argparse.py", line 1762, in parse_known_args
    namespace, args = self._parse_known_args(args, namespace)
  File "/usr/lib/python3.6/argparse.py", line 1968, in _parse_known_args
    start_index = consume_optional(start_index)
  File "/usr/lib/python3.6/argparse.py", line 1908, in consume_optional
    take_action(action, args, option_string)
  File "/usr/lib/python3.6/argparse.py", line 1836, in take_action
    action(self, namespace, argument_values, option_string)
  File "/usr/lib/python3.6/argparse.py", line 1020, in __call__
    parser.print_help()
  File "/usr/lib/python3.6/argparse.py", line 2362, in print_help
    self._print_message(self.format_help(), file)
  File "/usr/lib/python3.6/argparse.py", line 2346, in format_help
    return formatter.format_help()
  File "/usr/lib/python3.6/argparse.py", line 282, in format_help
    help = self._root_section.format_help()
  File "/usr/lib/python3.6/argparse.py", line 213, in format_help
    item_help = join([func(*args) for func, args in self.items])
  File "/usr/lib/python3.6/argparse.py", line 213, in <listcomp>
    item_help = join([func(*args) for func, args in self.items])
  File "/usr/lib/python3.6/argparse.py", line 213, in format_help
    item_help = join([func(*args) for func, args in self.items])
  File "/usr/lib/python3.6/argparse.py", line 213, in <listcomp>
    item_help = join([func(*args) for func, args in self.items])
  File "/usr/lib/python3.6/argparse.py", line 531, in _format_action
    parts.append(self._format_action(subaction))
  File "/usr/lib/python3.6/argparse.py", line 519, in _format_action
    help_text = self._expand_help(action)
  File "/usr/lib/python3.6/argparse.py", line 606, in _expand_help
    return self._get_help_string(action) % params
ValueError: incomplete format


Jag verkar ha missat någonting i min cli_parser modul men jag vet inte vad det kan vara...

Här är en länk till min kod: https://codeshare.io/5PX6wQ

Tack på förhand!
Användarvisningsbild

Lew

dbwebb

  • Inlägg: 406
  • Blev medlem: 05 sep 2012, 13:42
  • Ort: Karlskrona

Re: Kmom05 -h fungerar ej

Inlägg19 okt 2017, 08:09

Det beror på raderna:

Kod: Markera allt
subparser.add_parser("word_frequency", help="count word frequency in %")
subparser.add_parser("letter_frequency", help="count letter frequency in %")


Du behöver escapa procent tecknet då det används i strängformattering. Du kan använda dubbla precenttecken för att lösa problemet:

Kod: Markera allt
subparser.add_parser("word_frequency", help="count word frequency in %%")
subparser.add_parser("letter_frequency", help="count letter frequency in %%")
When in doubt, use brute force.

anna7

css-hackare

  • Inlägg: 26
  • Blev medlem: 21 aug 2017, 09:17

Re: Kmom05 -h fungerar ej

Inlägg19 okt 2017, 14:01

Jaha! Nu funkar det. Tack för hjälpen!

Daniel17

*nix-hackare

  • Inlägg: 114
  • Blev medlem: 03 sep 2017, 13:05

Re: Kmom05 -h fungerar ej

Inlägg24 okt 2017, 16:28

Hej!

Jag sitter fast i kmom05 analyzer-uppgiften och kommer inte längre.

Jag har gjort en fil med alla funktioner för textanalysen så det fungerar men implementationen i mainfilen och cli-filen kommer jag inte på.

Så här ser min cli-fil ut: https://codeshare.io/2WWxAY
Jag har härmat tidigare skrivare i den här tråden men i grunden har jag kommit lika långt.

Jag får just nu felmeddelande om att cli.. has no attribute "options".

Jag har försökt läsa och kollat en massa videor men kan inte förstå kopplingarna som behöver göras mellan main, cli och min analyzer-fil.

Behöver hjälp.
Användarvisningsbild

Allinrep

dbwebb

  • Inlägg: 1124
  • Blev medlem: 03 sep 2012, 09:19
  • Ort: Portugal (tillfälligt)

Re: Kmom05 -h fungerar ej

Inlägg24 okt 2017, 16:39

Problemet är att du försöker nå cli_parser.options men du har bakat in den i en funktion så att den inte längre är global. I exempelkoden i argparse-övningen så skapas objektet options = {} i det globala scopet utanför alla funktioner och det är därför det går att nå det i main.

Daniel17

*nix-hackare

  • Inlägg: 114
  • Blev medlem: 03 sep 2017, 13:05

Re: Kmom05 -h fungerar ej

Inlägg24 okt 2017, 16:41

Ok! Tack jag provar.

Jag får nu även följande felmeddelande:

$ python3 main.py words phil.txt
usage: main.py [-h] [--verbose | --silent | -V]
filename
{lines,words,letters,word_frequency,letter_frequency,all} ...
main.py: error: argument commands: invalid choice: 'phil.txt' (choose from 'lines', 'words', 'letters', 'word_frequency', 'letter_frequency', 'all')


Jag tror ju att det ska gå att ange filnamnet på commandoraden men programmet säger som sagt enligt ovan.. vad är felet?

Här är min analyzer-kod: https://codeshare.io/G8r9Yv

Här är min main-kod: https://codeshare.io/ayqgwb
Användarvisningsbild

Allinrep

dbwebb

  • Inlägg: 1124
  • Blev medlem: 03 sep 2012, 09:19
  • Ort: Portugal (tillfälligt)

Re: Kmom05 -h fungerar ej

Inlägg24 okt 2017, 16:54

Om jag kopierar din cli_parser.py (och flyttar på options = {}) och använder main.py från exemplet i argparse-övningen så får jag det här resultatet:
Kod: Markera allt
$ python3 main.py words phil.txt
{'unknown_args': ['phil.txt'], 'known_args': {'version': 'False', 'silent': 'False', 'commands': 'words', 'verbose': 'False'}}

Daniel17

*nix-hackare

  • Inlägg: 114
  • Blev medlem: 03 sep 2017, 13:05

Re: Kmom05 -h fungerar ej

Inlägg25 okt 2017, 18:01

Hej!

När jag kör min cli (med flyttad options = {}) och main.py från argparse får jag följande fel:
(tog bort add.argument filename)

$ python3 main.py words phil.txt
{'known_args': {'verbose': 'False', 'silent': 'False', 'version': 'False', 'commands': 'words'}, 'unknown_args': ['phil.txt']}
Traceback (most recent call last):
File "main.py", line 60, in <module>
main()
File "main.py", line 34, in main
print(cli_parser.options["known_args"]["command"])
KeyError: 'command'

Varför blir det keyerror på command?
Användarvisningsbild

Zeldah

dbwebb

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

Re: Kmom05 -h fungerar ej

Inlägg26 okt 2017, 07:22

{'known_args': {'verbose': 'False', 'silent': 'False', 'version': 'False', 'commands': 'words'}, 'unknown_args': ['phil.txt']}

print(cli_parser.options["known_args"]["command"])

Man missar lätt en bokstav eller två.

Daniel17

*nix-hackare

  • Inlägg: 114
  • Blev medlem: 03 sep 2017, 13:05

Re: Kmom05 -h fungerar ej

Inlägg26 okt 2017, 14:08

ändrade lite i koden och la till args = parser.parse_args() nu får jag följande fel:

$ python3 main.py words phil.txt
usage: main.py [-h]
{lines,words,letters,word_frequency,letter_frequency,all} ...
main.py: error: unrecognized arguments: phil.txt

varför känner den inte av att det är en fil?

vad lagras i args-variabeln? och hur hänger args ihop med known-args?
Användarvisningsbild

Zeldah

dbwebb

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

Re: Kmom05 -h fungerar ej

Inlägg27 okt 2017, 07:50

Funktionen parser.parse_args() returnerar ett objekt med alla kända argument som du skickat in vid start och om du skickar med några okända argument, du har inte lagt till dem med add_argument(), får du ett error.
Du skickar in "phil.txt" som ett okönt argument, antar jag för så vi lärt er, och då får du felmeddelandet.

Funktionen du vill använda är parser.parse_known_args(), den skapar inte felmeddelanden när du skickar med ett okänt argument utan returnerar istället dem i en separat lista.

Daniel17

*nix-hackare

  • Inlägg: 114
  • Blev medlem: 03 sep 2017, 13:05

Re: Kmom05 -h fungerar ej

Inlägg27 okt 2017, 11:45

Nu säger programmet:
$ python3 main.py words phil.txt
Traceback (most recent call last):
File "main.py", line 76, in <module>
main()
File "main.py", line 33, in main
print(cli_parser.add.commands(parser))
AttributeError: module 'cli_parser' has no attribute 'add'

När jag tittari min cli i add.commands-funktionen så finns där "add". Vad är det som saknas?

Här är min cli: https://codeshare.io/24PY1K
Användarvisningsbild

Allinrep

dbwebb

  • Inlägg: 1124
  • Blev medlem: 03 sep 2012, 09:19
  • Ort: Portugal (tillfälligt)

Re: Kmom05 -h fungerar ej

Inlägg27 okt 2017, 12:00

Jag ser ingen add.commands i din cli. Jag ser add_commands men det är stor skillnad på _ och ..

Daniel17

*nix-hackare

  • Inlägg: 114
  • Blev medlem: 03 sep 2017, 13:05

Re: Kmom05 -h fungerar ej

Inlägg27 okt 2017, 12:07

Ajdå. Nu har jag ändrat men jag hittar "bara" detta när jag kallar på funktionerna i parse_options. Var det nån mer stans?

Hur som får jag nu följande fel:
File "main.py", line 30, in main
opts = cli_parser.parse_options()
File "/cygdrive/c/users/bobo/dbwebb-kurser/python/me/kmom05/analyzer/cli_parser.py", line 63, in parse_options
add.options(parser)
NameError: name 'add' is not defined


Jag förstår inte varför add inte skulle vara definierat?
Användarvisningsbild

Allinrep

dbwebb

  • Inlägg: 1124
  • Blev medlem: 03 sep 2012, 09:19
  • Ort: Portugal (tillfälligt)

Re: Kmom05 -h fungerar ej

Inlägg27 okt 2017, 12:17

Som sagt, du har ingen add, du har add_options. Felmeddelandet talar om för dig vilken fil det är du har skrivit fel i och till och med vilken rad det är fel på. Läs felmeddelandet och kolla den filen och den raden och fixa så att du använder rätt namn på funktionen.

Daniel17

*nix-hackare

  • Inlägg: 114
  • Blev medlem: 03 sep 2017, 13:05

Re: Kmom05 -h fungerar ej

Inlägg28 okt 2017, 15:25

Heureka!!! Nu har jag löst uppgiften!

Vilka är online

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