【问题标题】:UnboundLocalError: local variable referenced before assignment in imported function onlyUnboundLocalError:仅在导入函数中赋值之前引用的局部变量
【发布时间】:2017-05-25 16:56:54
【问题描述】:

我编写了一个函数,应该将数据从 mysql 数据库导入 python。当我在包含该函数的文件中运行该函数时,该函数有效,但是当我尝试将该函数导入另一个 python 文件时,我得到“Unbound LocalError”错误。

我已经尝试将变量 'sqlcode_sm' 声明为全局变量,但它不能解决问题。

from __future__ import print_function
import pandas as pd
import numpy as np
import pymysql 
pymysql.install_as_MySQLdb()
import MySQLdb as mdb
from datetime import datetime
import os
import sys


def sec_master_retriever(tables):
    # should be any column(s) or * for all

    sql_table       = "sec_master"


    ######SQL PART: Retrieving the data
    # Connect to the MySQL instance
    db_host = 'localhost'
    db_user = 'root'
    db_pass = 'xyz'
    db_name = 'securities_master'
    con = mdb.connect(db_host, db_user, db_pass, db_name)
    sqlcode_sm = """SELECT %s FROM %s AS sm ;""" % (tables, sql_table)
    sqltable       = pd.read_sql_query(sqlcode_sm, con=con)

    return sqltable

如果我现在继续写:

df = sec_master_retriever('*')

这没有问题,但是打开一个新的 Python 文件,导入函数并执行它,如下所示:

from sec_master_retriever import sec_master_retriever as smr
df2 = smr("*")

导致错误:“UnboundLocalError: local variable 'sqlcode_sm' referenced before assignment”

感谢您的帮助

【问题讨论】:

  • 感谢这解决了问题!

标签: python mysql


【解决方案1】:

移动这一行

pymysql.install_as_MySQLdb()  

在里面

def sec_master...  

或以下

if __name__ == '__main__':

【讨论】:

    猜你喜欢
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 2013-11-29
    • 2019-09-02
    • 1970-01-01
    • 2021-12-24
    • 2022-12-25
    相关资源
    最近更新 更多