2017-12-16 17 views
1

私はGoogle翻訳のAPIを使用していますし、それがエラーを示している。Argparse:あまりにもいくつかの引数の翻訳API

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

APIのコードは、私はそれが​​モジュールによるものだと思う

#!/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() 

ですしかし私は確信していません。私は初心者ですので、完全に説明してください。前もって感謝します。

+0

'-d'とその引数を指定しましたが、' text'の文字列は指定しませんでした。 'text'は位置情報であり、したがって必須です。 Py3では、どの引数が欠落していたかをエラーが示していました。 Py2はこの一般的な「あまりにも少ない」ものです。 – hpaulj

+0

@hpaulj OPは 'boy'をテキストとして渡しますか? – poke

+0

私は少年をテキストとして提供しました。 – Mohit

答えて

0

私はこのコードは自分のものだと思っていました。

このように、別のパーサーは存在しないため、ギブスのスクリプトが表示されます。

まだ適用示唆診断 - Translateへの呼び出しをパーサはパースした後、印刷argsを取得しているかを見ると、(今のところ)スキップするsys.argvを印刷します。可能であればpy3で実行してください。ただ

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) 


あなたのパーサが生成します。つまり

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 

が、それはあなたの入力で動作します。 Py3で述べたように、エラーメッセージはより明確になります。

Translatorに問題があると思われます。それは独自のパーサを持っていて、おそらくsys.argvを修正するかもしれません。あなたはそれを確認するためにprint(sys.argv)することもできます。

使用法が一致しているため、エラーメッセージがパーサーから送信されているようです。

+0

ええ、私はそれがpython3のために働いていると思います。しかし、私はそれを使用しているプロジェクトはpython3をサポートしていないので、python2のためだけに使う必要があります。あなたは何かを提案できますか?また、python2とpython3のコードの違いは何ですか? @hpaulj – Mohit

+0

この場合、重要な違いはエラーメッセージだけです。 Py3はより有益であるべきです。私はなぜPy3がエラーなしで動くのか、Py2はこのメッセージを出しているのか分かりません。サブパーザが必要かどうかは異なりますが、このコードはその機能を使用していません。 – hpaulj

関連する問題