python - 定义类变量时出现NameError

标签 python

显然我在做一些愚蠢的事情。但什么?

我得到:

File "<path>", line 71, in args
    filename = filename
NameError: name 'filename' is not defined

...在下面的倒数第二行(“文件名 = 文件名”):

def parseLog(filename, explain=False, omitminor=False, omitexpected=False, 
omitgdocs=False, args=None):
    print(filename)
    if not args:
        class args:
            filename = filename
            explain = explain

但是上面的第二行(“print(filename)”)工作正常。那么,为什么会出现错误呢?

如果您想知道我为什么要这样做,那是因为函数 parseLog() 也可以通过命令行调用,如下所示:

def parseLogCLI():
    ''' parse command line for arguments '''

    parser = argparse.ArgumentParser()
    parser.add_argument('filename')
    parser.add_argument('-explain', action="store_true", help='Explain what program has done')
    parser.add_argument('-omitminor', action="store_true", help='Omit minor errors ' + repr(minor_errors))
    parser.add_argument('-omitexpected', action="store_true", help='Omit machines expected to be often offline')
    parser.add_argument('-omitgdocs', action="store_true", help='Omit errors on Google Docs native files (not copyable) ' + repr(gdocs))
    args = parser.parse_args()

    parseLog(arg.filename, args=args)

...所以我试图构造一个“arg”类(如 argparse 所做的那样)来传递给我的函数。如果有更好的方法来做到这一点,我很感兴趣。

最佳答案

使用class args:,您将开始定义一个类。 在这种情况下,filename 的第一次出现定义了一个类属性,您尝试在完全定义它之前从其自己的值分配该属性。

首先,我认为您应该更详细地研究类、作用域和实例的概念。 这将帮助您理解为什么您的函数参数 filename 被类范围内的新定义隐藏。

关于python - 定义类变量时出现NameError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53242897/

相关文章:

python - 使用 `python -m jsontool` 从命令行验证 JSON 给出 'No JSON object could be decoded'

python - 使用自定义编码器将带有 Decimal 键的 python 字典转换为 JSON

python - Flask 中的简单例份验证在 Apache 下不起作用

python - 使用正则表达式匹配@user

python - 在 PySpark 中使用 'window' 函数按天分组时出现问题

c++ - 这个 C/C++ 中的 python 代码

Python:MySQL 连接类包装器

python - 如何访问 python datetime.time 列中的小时数

python - 在 Pandas 中使散点图的标签垂直和水平

python - 如何使用 django-allauth 创建多个注册页面?