2016-12-20 1 views
0

그래서이 메소드는 일부 html 데이터와 이미지 링크를 추출하고이를 미리 만들어진 템플릿으로 구성한 다음 webbrowser.open을 통해 나에게 보여 주거나 전체를 반환합니다 html 코드를 문자열로 사용합니다 (외부 프로그램에 사용되는 경우)TypeReq를 전달하려고 할 때 * args가 re.findall로 전달됩니다.

이전에는이 ​​함수를 내부적으로 호출하고 url을 수동으로 입력 했으므로 매번 템플릿이 성공적으로 만들어졌습니다. 이제 re.findall()은 튜플 * args를 허용하지 않고 어떤 시도를했는지 (''.join, '{}'.format(tup), repr(), str()) 아무 것도 작동하지 않았습니다. Python 2.7.12 사용하기. 그래서 기본적으로 내 질문은 create_template()에 * args (항상 문자열이 될 것입니다)를 전달하는 것입니다.

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

당신은 당신의 코드를과 복잡함을하고 있습니다. 함수에 대한 입력이 0 개 또는 하나 인 경우 splat 연산자를 사용할 필요가 없습니다. 입력 인수의 변수 번호가있을 때 fun(*args) 대부분 필요 사용

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] 
     # ... 

을 당신은 입력의 모든을 잡으려면 대신 입력이없는 경우 설명하기 위해 기본 인수, 단일 입력 이름을 사용합니다. 귀하의 경우를 들어, 대신, .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'을 할당 할 것입니다. 이것은이 입력 매개 변수를 선택적으로 만듭니다. 당신이 필요한 것. –

관련 문제