2017-01-21 6 views
0

私は非常に基本的な間違いをしていると思いますが、私はそれを理解できないようです。エラーは以下に述べるが、wbopen_xl_file()で定義されているので、私は混乱していますされていますPythonでは、別のスクリプトから関数を呼び出すと、NameErrorを取得できますか?

私はエラーログ

import openpyxl 
import os 
import re 

def open_xl_file(): 
    loc = input("Please enter path of the file:") 
    os.chdir(loc) 
    file = input("Filename:") 
    wb = openpyxl.load_workbook(file) 

def sheet_select(): 
    check = input("Have you called open_xl_file? If yes Press 1 else press 2: ") 
    print(check) 
    if int(check) != 1: 
     open_xl_file() 
     sheet = input("Which Sheet do you want to email?\n") 
     wb.get_sheet_by_name(sheet) 
     sheet 
    else: 
     sheet = input("Which State do you want to email?\n") 
     wb.get_sheet_by_name(sheet) 
     sheet 

別のスクリプトから関数を呼び出すしようとすると:

NameError: name 'wb' is not defined.

+0

Pythonの変数の範囲については、参考になるかもしれません。 [ここ](http://gettingstartedwithpython.blogspot.in/2012/05/variable-scope.html)を参照してください –

答えて

1

開いているワークブックをopen_xl_filereturn openpyxl.load_workbook(file)に戻して参照する必要がありますwbsheet_select中に:wb = open_xl_file()

import re, openpyxl, os 


def open_xl_file(): 
    loc = input("Please enter path of the file:") 
    os.chdir(loc) 
    file = input("Filename:") 
    return openpyxl.load_workbook(file) 

def sheet_select(): 
    check = input("Have you called open_xl_file? If yes Press 1 else press 2: ") 
    print(check) 
    wb = open_xl_file() 
    if int(check) != 1: 
     sheet = input("Which Sheet do you want to email?\n") 
     wb.get_sheet_by_name(sheet) 
     return sheet 
    else: 
     sheet = input("Which State do you want to email?\n") 
     wb.get_sheet_by_name(sheet) 
     return sheet 
+0

ああ、はい。 'print'と' return'の違いと用途について私が読んだことを完全に忘れました。 :) – Sid

+0

これに少し問題があります。それは 'if'を無意味にしますか?基本的には、入力に関係なく 'open_xl_file()'が実行されます。なぜなら、 'wb'は両方に記述されているからです。 – Sid

+0

はい、 'wb'にアクセスしたい場合は、ブックを開く必要があります。あなたの 'if'と' else'はまったく同じです。両方の違いは何でしょうか? –

0

理由がありますその変数wbは、open_xl_file()関数のスコープ内で定義されています。つまり、この関数内でのみ表示されます( "local"変数)。したがって、その関数の外で使用したい場合は、グローバルにすることをお勧めします(これはお勧めできません)。

0

'WB' 関数 'sheet_select' で定義されていない、あなたはsheet_selectする 'WB' 渡す必要があります。試してみることができます:

def open_xl_file(): 
    loc = input("Please enter path of the file:") 
    os.chdir(loc) 
    file = input("Filename:") 
    wb = openpyxl.load_workbook(file) 
    return wb 

def sheet_select(wb): 
    ... 

if __name__ == '__main__': 
    myWb = open_xl_file() 
    sheet_select(myWb) 
関連する問題