2017-12-28 18 views
-2

私は、ファイル名と数値データを受け取るインタフェースを持つPythonプログラムを作成しました。ファイル名、ディレクトリなどを操作するメソッドを作成すると、エラーが返されます。オブジェクトの方向:Pythonのメソッドでエラーが発生しました

エラーはオブジェクトの向きに起因すると思います。これをどうすれば解決できますか?

私はプログラムを2つの部分に分割しました.1つは問題を解決するため(オブジェクト指向なし)、もう1つはユーザーデータを受け取ることです。

エラー:

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python27\lib\lib-tk\Tkinter.py", line 1541, in __call__ 
    return self.func(*args) 
    File "teste.py", line 60, in verificaSenha 
    if (Procura_nome(nome_arq) == 1): 
NameError: global name 'Procura_nome' is not defined 

完全なコード:https://pastebin.com/Br6JAcuR

問題のある方法:すべてのPythonのメソッドクラスが最初の引数としての自己のparamを持っている必要があります

def Procura_nome(nome_arq): 
    dir = Percorre_dir_entrada() 
    arquivo = dir + dir[2] + nome_arq + + ".shp" 
    os.path.isfile(nome_arq) 
    try: 
     with open(arquivo, 'r') as f: 
      return 1 
    except IOError: 
     return 0 
+0

「Procura_nome」はクラスの一部であると思われますか? – depperm

+0

はい、すべてのメソッドは@deppermクラスの一部でなければなりません –

+0

'self'が' Procura_nome(self、nome_arq)のようなすべてのメソッドの最初のパラメータになる必要があります: ' – depperm

答えて

0

、この引数は、インスタンスを参照あなたのクラスの中でクラスメソッドと属性を使用するときには、自分自身でそれらを参照する必要があります。

おそらく、ファイル内のすべてのメソッドクラスにselfを追加する必要があります。

また、3行目の「+」を削除する必要があります。

def Procura_nome(self, nome_arq): 
    dir = self.Percorre_dir_entrada() 
    arquivo = dir + dir[2] + nome_arq + ".shp" 
    os.path.isfile(nome_arq) 
    try: 
     with open(arquivo, 'r') as f: 
      return 1 
    except IOError: 
     return 0 

Percorre_dir_entradaとPercorre_dir_saida機能が異なるファイルにまったく同じことをやっているあなた、あなたはそのようのparamとしてファイル名を取るジェネリック版をやって考えるべきでは:

def Percorre_dir(self, file_name): 
    achou = 0 
    dirlist = os.listdir(".") 
    for i in dirlist: 
     filename = os.path.abspath(i) 
     if((filename.find(file_name)) != -1): 
      achou = 1 
      return filename 
    if(achou == 0): 
     return 0 

は、それを呼び出します:

Percorre_dir("Saida") 
Percorre_dir("Entrada")