Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python NameError:未定义名称“writer”_Python_Function_Parameter Passing_Local Variables_Nameerror - Fatal编程技术网

Python NameError:未定义名称“writer”

Python NameError:未定义名称“writer”,python,function,parameter-passing,local-variables,nameerror,Python,Function,Parameter Passing,Local Variables,Nameerror,在这段实际代码中,已经定义了writer和row,但如果我决定实现多个_df,则会出现一些错误,如下所示: 我得到了writer的以下错误,但row也发生了同样的事情 我如何修复这些错误?我不想在多个df中重新定义它们,但我还需要在将来的函数中重新定义它们。即使您从writer存在的作用域调用函数,被调用方也看不到它,这正是python的作用域规则的工作方式 我建议让您的multiple_dfs函数接受另一个名为writer的参数,您可以从调用者函数传递该参数。如果除了writer之外还要传递多

在这段实际代码中,已经定义了writer和row,但如果我决定实现多个_df,则会出现一些错误,如下所示:

我得到了writer的以下错误,但row也发生了同样的事情


我如何修复这些错误?我不想在多个df中重新定义它们,但我还需要在将来的函数中重新定义它们。

即使您从writer存在的作用域调用函数,被调用方也看不到它,这正是python的作用域规则的工作方式

我建议让您的multiple_dfs函数接受另一个名为writer的参数,您可以从调用者函数传递该参数。如果除了writer之外还要传递多个参数,则需要使用变量参数

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
调用多个\u dfs:


首先,您可以将writer传递给使用它的函数。函数如何知道使用它无权访问的变量?writer不是一个全局变量。@cᴏʟᴅsᴘᴇᴇᴅ 你是说多个项目、工作表、书写器、行吗?我希望避免这种做法。我是否可以将writer定义为“创建工作表”和“更新工作表”函数中的全局变量?你有什么建议?为什么你想避免一些事情,而去做一些你应该避免的事情?全局变量是一种不好的做法,会导致代码的味道,而且,您不应该在这里真正使用全局变量,因为编写器在函数退出之前就关闭了。@cᴏʟᴅsᴘᴇᴇᴅ 假设我在两个函数中都有variable1、variable2、…、variableN,有点像writer和row,我认为显示多个项目、工作表、writer、row、variable1、…、variableN不是一个好的做法。在这种情况下你有什么建议?传递一个列表或变量参数@J.Doe添加这一行:writer,row=args[:2],似乎您需要阅读python教程。另外,因为你的错误而不接受答案有点不公平,你不觉得吗?不要让人接受。当我的问题完全解决后,我会接受答案。@J.Doe您是否意识到,要访问变量,必须声明它?multiple_dfs将您的writer设置为args[0],因此您应该以这种方式访问它,或者将其分配给其他对象。如果您不知道这一点,则意味着您需要阅读python教程,了解变量和参数传递的工作原理。
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
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
def multiple_dfs(item, sheets, *args):
    for i, var in enumerate(args, 1):
        print('variable {}: {}'.format(i, var))
    ...
multiple_dfs(item, 'Game Schedule', variable1, variable2, ...)