NameError: name 'writer' is not defined
NameError: name 'writer' is not defined
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()
在此实际代码中,writer
和 row
已经定义,但如果我决定将 multiple_dfs
实现为:
,我会遇到一些错误
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
中重新定义它们,但我也需要在以后的函数中重新定义它们。
即使您从 writer
存在的作用域中调用函数,被调用者也看不到它,这就是 python 的作用域规则的工作方式。
我建议让您的 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, ...)
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()
在此实际代码中,writer
和 row
已经定义,但如果我决定将 multiple_dfs
实现为:
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
中重新定义它们,但我也需要在以后的函数中重新定义它们。
即使您从 writer
存在的作用域中调用函数,被调用者也看不到它,这就是 python 的作用域规则的工作方式。
我建议让您的 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, ...)