Python中特定于操作系统的命名空间规则

Python中特定于操作系统的命名空间规则,python,windows,macos,namespaces,Python,Windows,Macos,Namespaces,以下代码在Windows上运行良好,但在Mac上引发UnboundLocalError: file = open(file_path, newline = '') reader = file.readlines() for line in reader: if "Physical Address" in line: line_ = line if self.ip in line: split_line = line_.split()

以下代码在Windows上运行良好,但在Mac上引发UnboundLocalError:

file = open(file_path, newline = '')
reader = file.readlines() 

for line in reader:  
    if "Physical Address" in line: 
        line_ = line 
    if self.ip in line:
        split_line = line_.split()
        break

for word in split_line:     
    if '-' in word:
        dashed_mac_address = word
        break
在第二个for循环中,Windows上的Python知道我在说什么,但是在Mac上,“split_line”和“drash_Mac_address”被解释为在赋值之前被引用


我理解为什么会出现这样的错误,但这是正确的吗?命名空间规则是特定于操作系统的吗?我希望这样的东西在任何平台上都是标准的

看起来您正试图从终端输出解析ip/mac地址

如果是这种情况,则windows cmd提示符中显示的输出与Mac中显示的输出不同


请查看mac termina上ipaddress输出的示例,并将其与windows提示符输出进行比较。

看起来您正在尝试从终端输出解析ip/mac地址

如果是这种情况,则windows cmd提示符中显示的输出与Mac中显示的输出不同


尝试查看mac termina上ipaddress输出的示例,并将其与windows提示符输出进行比较。

这意味着无法在文件中找到
self.ip
。这只是一个摘录,
self.ip
在方法的第一行中定义。在for循环解决错误之前,分别将
分割线
虚线地址
定义为空列表和字符串。您可以有条件地为
线
分配一个值,然后在不相关的条件下使用
线
,如果它可能无法定义(即未绑定)。类似地,当可能没有为其分配任何内容时,可以使用
split_line
。你不是在防御性地编码。您必须仔细考虑各个分支,以确保处理所有案例。我知道您可能会询问从
文件路径
读取的输出的差异,不管是什么。但是给我们错误代码并没有帮助。实际问题可能与此无关,需要在超级用户上询问——例如,如果只是解析Windows中与macOS不同的命令行程序的输出。这意味着无法在文件中找到
self.ip
。这只是一个摘录,
self.ip
在方法的第一行中定义。在for循环解决错误之前,分别将
分割线
虚线地址
定义为空列表和字符串。您可以有条件地为
线
分配一个值,然后在不相关的条件下使用
线
,如果它可能无法定义(即未绑定)。类似地,当可能没有为其分配任何内容时,可以使用
split_line
。你不是在防御性地编码。您必须仔细考虑各个分支,以确保处理所有案例。我知道您可能会询问从
文件路径
读取的输出的差异,不管是什么。但是给我们错误代码并没有帮助。实际的问题可能与这里的主题无关,需要在超级用户上提问——例如,如果只是解析命令行程序的输出,那么在Windows中与macOS不同。是的,这就是我正在做的。我希望会有差异,所以一旦我在Windows上完成了编码,我就把它带到了Mac上。虽然相同的方法在终端中具有相同的文本,但不会产生错误,它只返回
None
。对于self.ip在赋值前被解释为引用的问题,请尝试查看您拥有的值以及self.ip的值是否存在。发生这种情况的原因是self.ip不在同一行中,因此split_line未初始化。但您正在尝试访问for循环中的split_line。是的,这就是我正在做的。我希望会有差异,所以一旦我在Windows上完成了编码,我就把它带到了Mac上。虽然相同的方法在终端中具有相同的文本,但不会产生错误,它只返回
None
。对于self.ip在赋值前被解释为引用的问题,请尝试查看您拥有的值以及self.ip的值是否存在。发生这种情况的原因是self.ip不在同一行中,因此split_line未初始化。但您正在尝试访问for循环中的split_行。