Python类NameError:未定义全局名称

时间:2017-06-02 15:29:54

标签: python python-2.7

我正在尝试使用python类,下面是我的第一个python类代码:

import re
import time
import paramiko

hostname = "10.1.1.1"
net_username = "user"
net_password = "password"
class asr_qa:
    def __init__(self, hostname, net_username, net_password):

        ''' SSH connection Establish '''

        self.remote_conn_pre = paramiko.SSHClient()
        self.remote_conn_pre.set_missing_host_key_policy(
            paramiko.AutoAddPolicy())
        self.remote_conn_pre.connect(hostname, username=net_username,
            password=net_password,look_for_keys=False, allow_agent=False)
        self.remote_conn = remote_conn_pre.invoke_shell()
        buff = ''
        while not buff.endswith('#'):
            resp = remote_conn.recv(9999)
            buff += resp
            print(resp)

    def __disconnect__(self):
        self.remote.close()

    def __send_command__(self, cmd):
        remote_conn.send(self.cmd)
asr = asr_qa(hostname, net_username, net_password)
asr.__send_command__("ping 10.10.10.10\n")
print asr.resp
asr.__disconnect__()

我收到以下错误:

Traceback (most recent call last):
  File "test.py", line 30, in <module>
    asr = asr_qa(hostname, net_username, net_password)
  File "test.py", line 18, in __init__
    self.remote_conn = remote_conn_pre.invoke_shell()
NameError: global name 'remote_conn_pre' is not defined

请让我知道我做错了什么。

并且我也尝试阅读许多文档,但我没有正确理解__init__究竟会做什么。

__init__是类的构造函数。当我们调用类时,它初始化__init__下的所有值(只要该类的新对象被实例化,就会调用此特殊函数),为什么我们不能直接定义__init__值来自行运行?

我们应该使用__init__

的情况

2 个答案:

答案 0 :(得分:0)

您定义了self.remote_conn_pre,但稍后您调用了remote_conn_pre。 remote_conn_pre与self.remote_conn_pre。

不同

改变这个:

self.remote_conn = remote_conn_pre.invoke_shell()

对此:

self.remote_conn = self.remote_conn_pre.invoke_shell()

您必须在代码的其他位置进行类似的更改,例如在self.之前添加remote_conn.recv(9999)

答案 1 :(得分:0)

好像你忘了把self放进去了:

self.remote_conn = remote_conn_pre.invoke_shell()

应该在哪里:

self.remote_conn = self.remote_conn_pre.invoke_shell()