2015-09-03 2 views
0

Я пытаюсь научить себя Python, и у меня возникла проблема. В настоящее время я запускаю pydev, если это влияет на что-либо.Проблема, вызывающая класс в другом файле Python

Вот мой класс в файле «Сток»:

class Stock(object): 
''' 
A stock traded on the NASDAQ 
''' 


def __init__(self, ticker, company, isETF, NASDAQSymbol, price): 
    ''' 
    Returns a stock object with a set ticker, company, ETF flag, NASDAQ Symbol and price 
    ''' 
    self.ticker = ticker 
    self.company = company 
    self.isETF = isETF 
    self.NASDAQSymbol = NASDAQSymbol 
    self.price = price 

Я хочу, чтобы создать экземпляр этого класса в другом файле я под названием «Main»:

import urllib.request 
from Stock.py import Stock 

if __name__ == '__main__': 
    with urllib.request.urlopen('ftp://ftp.nasdaqtrader.com/SymbolDirectory/nasdaqtraded.txt') as response: 
     html = response.read() 
    rawStockList = html.splitlines() 

for i in rawStockList: 
    stockInfo = i.split('|') 
    stock = Stock(stockInfo[1], stockInfo[2], stockInfo[5], stockInfo[10], 0) 

Я получаю ошибку при импорте «Unresolved import: Stock». Когда я прокомментирую эту строку, я получаю сообщение об ошибке на строке «Stock = Stock (...)», в которой говорится «Неопределенная переменная: запас». Для записи оба файла находятся в одной папке/проекте в Pydev.

Я сделал много поисковых запросов и не столкнулся с проблемой, достаточно подобной моей, которая имела полезное решение. Любые указания, указатели или помощь будут высоко оценены.

ответ

2

from Stock import Stock - вы не ставите имя файла в оператор a; вместо этого вместо имени модуля.

Вы должны также отступ if заявление так его на том же уровне отступа, как ваш with заявление (если это не ошибка в копирования вставки кода):

if __name__ == '__main__': 
    with urllib.request.urlopen('ftp://ftp.nasdaqtrader.com/SymbolDirectory/nasdaqtraded.txt') as response: 
     html = response.read() 
    rawStockList = html.splitlines() 

    for i in rawStockList: 
     stockInfo = i.split('|') 
     stock = Stock(stockInfo[1], stockInfo[2], stockInfo[5], stockInfo[10], 0) 

Наконец, имейте в виду, что, хотя вам зацикливаются на rawStockList, вы переписываете переменную stock в свой цикл. Фактически, ваш экземпляр stock будет отображать только данные последнего элемента в rawStockList.

Если вы хотите создать Stock элементы для всех данных в rawStockList, вам нужно сохранить каждый элемент отдельно:

if __name__ == '__main__': 
    with urllib.request.urlopen('ftp://ftp.nasdaqtrader.com/SymbolDirectory/nasdaqtraded.txt') as response: 
     html = response.read() 
    rawStockList = html.splitlines() 

    stocks = [] # This is an empty list 
    for i in rawStockList: 
     stockInfo = i.split('|') 
     stock = Stock(stockInfo[1], stockInfo[2], stockInfo[5], stockInfo[10], 0) 
     stocks.append(stock) 
    print(stocks) 
+0

Немного поздно, но спасибо за помощь! – silverstieff

Смежные вопросы