2017-12-16 2 views
1

Ich bin mit einer API-Übersetzung Google und es zeigt Fehler:argparse: Zu wenig Argumente Übersetzung API

translate boy -d french 
usage: [-h] [-d DEST] [-s SRC] [-c] text 
: error: too few arguments 

Der Code der API ist

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import argparse 
import sys 
from googletrans import Translator 

def main(): 
    parser = argparse.ArgumentParser(
     description='Python Google Translator as a command-line tool') 
    parser.add_argument('text', help='The text you want to translate.') 
    parser.add_argument('-d', '--dest', default='en', 
     help='The destination language you want to translate. (Default: en)') 
    parser.add_argument('-s', '--src', default='auto', 
     help='The source language you want to translate. (Default: auto)') 
    parser.add_argument('-c', '--detect', action='store_true', default=False, 
     help='') 
    args = parser.parse_args() 
    translator = Translator() 

    if args.detect: 
     result = translator.detect(args.text) 
     result = """ 
[{lang}, {confidence}] {text} 
     """.strip().format(text=args.text, 
      lang=result.lang, confidence=result.confidence) 
     print(result) 
     return 

    result = translator.translate(args.text, dest=args.dest, src=args.src) 
    result = u""" 
[{src}] {original} 
    -> 
[{dest}] {text} 
[pron.] {pronunciation} 
    """.strip().format(src=result.src, dest=result.dest, original=result.origin, 
         text=result.text, pronunciation=result.pronunciation) 
    print(result) 

if __name__ == '__main__': 
    main() 

Ich denke, es ist wegen argparse Modul aber ich bin mir nicht sicher. Ich bin ein Neuling, also erklären Sie bitte vollständig. Danke im Voraus.

+0

Sie haben '-d' und sein Argument, aber keine Zeichenfolge für' text' angegeben. 'text' ist eine Position und somit erforderlich. In Py3 hätte der Fehler Ihnen gesagt, welches Argument fehlte; Py2 gibt nur dieses generische "zu wenig". – hpaulj

+0

@hpaulj OP passiert "Junge" als Text obwohl? – poke

+0

Ich habe Boy als Text geliefert. – Mohit

Antwort

0

Hoppla - Ich dachte, dieser Code wäre dein eigener; es scheint das translate Skript aus dem GitHub zu sein, https://github.com/ssut/py-googletrans/blob/master/translate

So gibt es keinen anderen Parser.

noch die Diagnose, die gelten, vorschlagen - die sys.argv drucken, um zu sehen, was der Parser bekommt, Druck args nach dem Parsen und überspringt (bis jetzt) ​​um den Anruf zu Translate. Und wenn möglich mit py3 laufen.


Ihr Parser mit nur

parser = argparse.ArgumentParser(
    description='Python Google Translator as a command-line tool') 
parser.add_argument('text', help='The text you want to translate.') 
parser.add_argument('-d', '--dest', default='en', 
    help='The destination language you want to translate. (Default: en)') 
parser.add_argument('-s', '--src', default='auto', 
    help='The source language you want to translate. (Default: auto)') 
parser.add_argument('-c', '--detect', action='store_true', default=False, 
    help='') 
args = parser.parse_args() 
print(args) 

produziert:

1347:~/mypy$ python2 stack47849057.py 
usage: stack47849057.py [-h] [-d DEST] [-s SRC] [-c] text 
stack47849057.py: error: too few arguments 
1144:~/mypy$ python2 stack47849057.py boy 
Namespace(dest='en', detect=False, src='auto', text='boy') 
1144:~/mypy$ python2 stack47849057.py boy -d french 
Namespace(dest='french', detect=False, src='auto', text='boy') 
1145:~/mypy$ python3 stack47849057.py 
usage: stack47849057.py [-h] [-d DEST] [-s SRC] [-c] text 
stack47849057.py: error: the following arguments are required: text 

Mit anderen Worten, es mit Ihrer Eingabe funktioniert. Wie in Py3 erwähnt, ist die Fehlermeldung klarer.

Ich vermute, es gibt ein Problem mit Translator. Es kann einen eigenen Parser haben und vielleicht sogar die sys.argv ändern. Du könntest das auch überprüfen print(sys.argv).

Die Fehlermeldung scheint von Ihrem Parser zu kommen, da die Verwendung übereinstimmt.

+0

Ja, ich denke, es funktioniert für python3. Aber ich muss es nur für python2 verwenden, weil das Projekt, für das ich es verwende, python3 nicht unterstützt. Könntest du etwas vorschlagen? Was ist der Unterschied im Code für python2 und python3? @ hpaulj – Mohit

+0

In diesem Fall ist der einzige Unterschied, der zählt, die Fehlermeldung; Py3's sollten informativer sein. Ich weiß nicht, warum Py3 ohne Fehler laufen würde, während Py2 diese Nachricht gibt. Sie unterscheiden sich darin, ob Subparser erforderlich sind oder nicht, aber dieser Code verwendet diese Funktion nicht. – hpaulj

Verwandte Themen