2016-12-20 7 views
0

この方法では、いくつかのhtmlデータと画像リンクを抽出し、あらかじめ作成したテンプレートに整理してからwebbrowser.openで表示するか、外部コード用のhtmlコードTypeReqを渡そうとすると、* regefindallにargsが返されます

これまでは、内部でこの関数を呼び出すだけで、urlを手動で入力していたため、毎回テンプレートが正常に作成されました。今、re.findall()はタプル* argsを受け入れず、何を試しても(''.join, '{}'.format(tup), repr(), str())、それはうまくいきませんでした。 Pythonを使用して2.7.12。ですから、基本的に私の質問は、どのように* args(これは常に文字列になります)をcreate_template()に渡すのですか?

def create_template(*args): 
    p = re.compile('(?<=\/)[0-9]+|[0-9]+(?!.)') 
    if args:   
     argstring = '{}'.format(args) 
     itemID = re.findall(p,argstring)[0] 
     new_html = change_links(itemID) 
     info = get_walmart_info(itemID) 
     template = finish_template(new_html,info) 
     webbrowser.open('finished wtemplate.html') 
     return template 
    else: 
     url = raw_input("Enter itemID/url: ") 
     itemID = re.findall(p,url)[0] 
     new_html = change_links(itemID) 
     info = get_walmart_info(itemID) 
     finish_template(new_html,info) 
     webbrowser.open('finished wtemplate.html') 

if __name__ == '__main__': 
    create_template() 

と私は取得していますエラー(外部で使用する場合、まだ細かい内部使用):

Traceback (most recent call last): 
    File "<pyshell#23>", line 1, in <module> 
    wTemplate.create_template('37651390') 
    File "C:\Users\User\Desktop\Gal\Programming\wTemplate.py", line 91, in create_template 
    argstring = '{}'.format(*args) 
    File "C:\Python27amd64\lib\re.py", line 181, in findall 
    return _compile(pattern, flags).findall(string) 
TypeError: expected string or buffer 
+0

あなたはどのような議論をしていますか? –

+1

エラーとコードが一致していないようです。 –

+0

入力例と期待される出力を提供できますか? 'create_template()'がやろうとしていることは私には分かりません –

答えて

1

あなたはあなたのコードが複雑になり過ぎています。関数への入力がゼロまたは1つの場合、スプラット演算子を使用する必要はありません。代わりに、無入力の場合を考慮して、デフォルトの引数を指定して、単一の入力名を使用しますが、入力引数の変数の数だと、あなたが入力中のすべてをキャッチしたいとき

def create_template(inpstr=None): 
    p = re.compile('(?<=\/)[0-9]+|[0-9]+(?!.)') 
    if inpstr:  # inpstr=='37651390' case 
     argstring = '{}'.format(inpstr) 
     itemID = re.findall(p,argstring)[0] 
     # ... 
    else:    # inpstr==None case 
     url = raw_input("Enter itemID/url: ") 
     itemID = re.findall(p,url)[0] 
     # ... 

fun(*args)を使用することはほとんど必要です。あなたのケースでは、あなたの代わりに、あなたが.format()に長さ-1タプルを集めて

def create_template(*args): 
    p = re.compile('(?<=\/)[0-9]+|[0-9]+(?!.)') 
    if args:  # args==('37651390',) 
     argstring = '{}'.format(args[0]) # <-- args[0] 
    # ... 

を必要としていると思います。

+0

私が理解していない部分は '(inpstr = None) '正確に行う。 特に指定しない限り、inpstrを作成しますか?それは通訳者にゼロ引数を受け入れるよう指示しますか? –

+0

いずれにせよ、あなたの答えは私のためにそれを解決したものでした。 私はargsがリストであることを理解しています...初めてそれに干渉します。 –

+0

@galalmightyタプルですが、近いです:)そして、 'inpstr = None'はインタプリタに入力がない場合(その位置に)、その変数に' None'を割り当てます。これにより、この入力パラメータはオプションになります。ちょうどあなたが必要とするもの。 –

関連する問題