0
이 실제 코드에서
def create_and_update_worksheets(): 
    """ 
    Add 'Player statistics' if the worksheet is not in file_name. 
    Otherwise, it will update the worksheet itself. 
    """ 

    os.chdir(os.path.dirname(os.path.abspath(__file__))) 

    writer = pd.ExcelWriter(file_name, engine='openpyxl') 
    row = 0 

    for item in worksheets['Game Schedule'].values(): 
     multiple_dfs(item, 'Game Schedule') 

    for sheet in writer.sheets.values(): 
     resize_columns(sheet) 

    writer.save() 
    writer.close() 

정의,하지만 난 multiple_dfs을 구현하기로 결정한 경우 나는 몇 가지 오류가 없어 : 내가있어나가서 설명하자면 NameError : 이름이 '작가'가 <code>writer</code> 및 <code>row</code>가 이미 정의되어,

def multiple_dfs(item, sheets): 
    """ 
    Put multiple dataframes into one xlsx sheet 
    """ 

    response = send_request(item).content 
    df = pd.read_csv(io.StringIO(response.decode('utf-8'))) 

    df.to_excel(writer, sheets, startrow=row, index=False) 
    row = row + len(df) + 2 

writer에 대한 오류 다음에, 같은 일이 row에서 발생했습니다.

Traceback (most recent call last): 
    File "create_and_update_xlsx_sheets.py", line 66, in <module> 
    create_and_update_worksheets() 
    File "create_and_update_xlsx_sheets.py", line 56, in create_and_update_worksheets 
    multiple_dfs(item, 'Game Schedule') 
    File "create_and_update_xlsx_sheets.py", line 33, in multiple_dfs 
    df.to_excel(writer, sheets, startrow=row, index=False) 
NameError: name 'writer' is not defined 

어떻게 이러한 오류를 해결할 수 있습니까? multiple_dfs에서 다시 정의하고 싶지는 않지만 향후 함수에서도 재정의해야합니다.

+1

, 당신이 그것을 사용하는 함수에'writer'을 전달할 수 있습니다. 함수가 액세스 할 수없는 변수를 사용하는 것을 어떻게 알 수 있습니까? 'writer '는 처음부터 글로벌 변수가 아닙니다. –

+0

@ cᴏʟᴅs''multiple_dfs (item, sheets, writer, row) '를 의미합니까? 그러한 연습을 피하고 싶습니다. create_and_update_worksheets() 함수에서 전역 변수로'writer'를 정의 할 수 있습니까? 너는 무엇을 제안 하는가? –

+0

왜 피해야 할 다른 것을 선호하는 이유는 무엇입니까? 'global' 변수는 나쁜 습관이고 코드 냄새를 유발합니다. 게다가 함수가 종료되기 직전에 프로그래머가 닫혀 있기 때문에 전역 변수를 사용해서는 안됩니다. –

답변

1

writer이있는 범위에서 함수를 호출하더라도 호출 수신자는이를 볼 수 없으며 파이썬의 범위 지정 규칙이 작동하는 방식입니다.

multiple_dfs 함수에 호출자 함수에서 전달하는 writer이라는 다른 매개 변수를 허용하는 것이 좋습니다. writer 외에도 인수가 여러 개있는 경우 가변 인수를 사용해야합니다.

def multiple_dfs(item, sheets, *args): 
    for i, var in enumerate(args, 1): 
     print('variable {}: {}'.format(i, var)) 
    ... 

multiple_dfs를 호출 : 우선 들어

multiple_dfs(item, 'Game Schedule', variable1, variable2, ...) 
+0

@ J.Doe 다음 행을 추가하십시오 :'writer, row = args [: 2]', 파이썬 튜토리얼을 읽어야합니다. 또한, 실수로 인해 대답을 받아들이지 않는 것은 약간 불공평합니다. 생각하지 마십시오. –

+0

걸릴 수 없습니다. 문제가 완전히 해결되면 답변을 수락합니다. –

+0

@ J.Doe 변수에 액세스하려면 선언되어 있어야합니다. 'multiple_dfs'는 당신의 작가를'args [0]'으로 가지고 있기 때문에, 그렇게 접근하거나 다른 것에 할당해야합니다.모르는 경우에는 변수 및 매개 변수 전달이 작동하는 방식에 대한 Python 자습서를 읽어야합니다. –