2017-06-18 112 views
-3

我一直在得到下面的錯誤,有人可以請告訴我我做錯了什麼?TypeError:join()參數必須是str或bytes,而不是'NoneType'

Traceback (most recent call last): 
    File "generate_simulated_pair.py", line 50, in <module> 
    outfile = open(os.path.join(settings.CSV_DATA_DIR ,"%s_%s.csv"%(pair, d.strftime ("%Y%m%d") 
    File "C:\Program Files\Python35\lib\ntpath.py", line 113, in join 
    genericpath._check_arg_types('join', path, *paths) 
    File "C:\Program Files\Python35\lib\genericpath.py", line 143, in _check_arg_types 
    (funcname, s.__class__.__name__)) from None 
TypeError: join() argument must be str or bytes, not 'NoneType' 

請參閱下面看到的,這是一個用於創建從OANDA一個CSV文件,回溯測試

from __future__ import print_function 

import calendar 
import copy 
import datetime 
import os, os.path 
import sys 

import numpy as np 
import pandas as pd 
import pandas_datareader 

from pandas_datareader import data, wb 
from qsforex import settings 


def month_weekdays(year_int, month_int): 
""" 
Produces a list of datetime.date objects representing the 
weekdays in a particular month, given a year. 
""" 
cal = calendar.Calendar() 
return [d for d in cal.itermonthdates(year_int, month_int)if d.weekday() < 5 and d.year == year_int] 


if __name__ == "__main__": 
    try: 
    pair = sys.argv[1] 
except IndexError: 
    print("You need to enter a currency pair, e.g. GBPUSD, as a command line parameter.") 
else: 
    np.random.seed(42) # Fix the randomness 

    S0 = 1.5000 
    spread = 0.002 
    mu_dt = 1400 # Milliseconds 
    sigma_dt = 100 # Millseconds 
    ask = copy.deepcopy(S0) + spread/2.0 
    bid = copy.deepcopy(S0) - spread/2.0 
    days = month_weekdays(2014, 1) # January 2014 
    current_time = datetime.datetime(
     days[0].year, days[0].month, days[0].day, 0, 0, 0, 
    ) 

    # Loop over every day in the month and create a CSV file 
    # for each day, e.g. "GBPUSD_20150101.csv" 
    for d in days: 
     print(d.day) 
     current_time = current_time.replace(day=d.day) 
     outfile = open(os.path.join(settings.CSV_DATA_DIR ,"%s_%s.csv"%(pair, d.strftime ("%Y%m%d") 
       ) 
      ), 
     "wb") 
     outfile.write("Time,Ask,Bid,AskVolume,BidVolume\n")  

     # Create the random walk for the bid/ask prices 
     # with fixed spread between them 
     while True: 
      dt = abs(np.random.normal(mu_dt, sigma_dt)) 
      current_time += datetime.timedelta(0, 0, 0, dt) 
      if current_time.day != d.day: 
       outfile.close() 
       break 
      else: 
       W = np.random.standard_normal() * dt/1000.0/86400.0 
       ask += W 
       bid += W 
       ask_volume = 1.0 + np.random.uniform(0.0, 2.0) 
       bid_volume = 1.0 + np.random.uniform(0.0, 2.0) 
       line = "%s,%s,%s,%s,%s\n" % (
        current_time.strftime("%d.%m.%Y %H:%M:%S.%f")[:-3], 
        "%0.5f" % ask, "%0.5f" % bid, 
        "%0.2f00" % ask_volume, "%0.2f00" % bid_volume 
       ) 
       outfile.write(line) 

回答

4

settings.CSV_DATA_DIR是無,所以os.path.join(settings.CSV_DATA_DIR, ...)失敗。

爲了將來的參考,請查看回溯並將回溯到您自己的代碼;你的追溯始於:

File "generate_simulated_pair.py", line 50, in <module> 
    outfile = open(os.path.join(settings.CSV_DATA_DIR ,"%s_%s.csv"%(pair, d.strftime ("%Y%m%d") 

底部的異常告訴你:

join() argument must be str or bytes, not 'NoneType' 

這樣的參數之一os.path.join()None值。你通過在這兩個,第二個是肯定的字符串,讓你只有一個選擇:其他參數必須None

相關問題