2016-03-26 23 views
-1

Ich bin ziemlich neu bei Python und brauche ein wenig Anleitung. Ich versuche, einige Variablen von der Konsole zu übergeben und erhalten und die Fehlermeldung:Parsen von Variablen von Konsolenfehler

AuctionStrategy_2.0.py: error: argument -s/--sectorStocks: invalid int value: 'tep3'

, wenn ich den Konsolenbefehl auszuführen:

run AuctionStrategy_2.0.py -in10 -out5 -rolls15 -step3 -t.001 -s5 -m100 -v50 -e'01/01/2016' 

Könnte jemand lassen Sie mich, wie dieses Problem zu beheben, bitte? Mein Code macht im Moment nichts anderes, als die Variablen von der Konsole aus zu versuchen und zu übergeben. Siehe unten für meinen Code:

import argparse 
import os 
import fnmatch 
import pandas as pd 
from pandas.tseries.offsets import BDay 
import lzma 
import numpy as np 
import math 
import datetime 

def main(): 
    print('Processing args....') 

    insampleLength,outsampleLength,rolls,step,threshold,minStocksPerSector,minMarketCap,minVolume,endDate = get_args() 
    print(insampleLength,outsampleLength,rolls,step,threshold,minStocksPerSector,minMarketCap,minVolume,endDate) 
    rawDataPath = 'C:/Users/simon/Documents/data/close_unadjusted/close_unadjusted/' 

def get_args(): 

    '''This function parses and return arguments passed in''' 

    insampleLength = 0 
    outsampleLength = 0 
    rolls = 0 
    step = 0 
    endDate ='' 
    minStocksPerSector = 0 
    threshold = 0 


    parser = argparse.ArgumentParser(
     description='Args to run VWAP Auction simulation') 

    ''' Command line arguments''' 

    parser.add_argument('-in', '--inSampleDataLength', type=int, help='Number of historic epochs insample', required=True) 
    parser.add_argument('-out', '--outSampleDataLength', type=int, help='Number of historic epochs outsample', required=True) 
    parser.add_argument('-rolls', '--numberRolls', type=int, help='Number of rolls', required=True) 
    parser.add_argument('-step', '--rollStep', type=int, help='Number of historic epochs', required=True) 

    parser.add_argument('-t','--threshold', type=float, help='starting value', required=True)  
    parser.add_argument('-s','--sectorStocks', type=int, help='minimum number', required=True) 
    parser.add_argument('-m','--marketCapCutOff', type=int,help='market capitalisation', required=True) 
    parser.add_argument('-v','--volumeCutOff', type=int, help='daily volume', required = True) 
    parser.add_argument('-e', '--endDate', type=str,help='last day of testing',required = True) 


    args = parser.parse_args() 

    ''' Assign args to variables''' 

    insampleLength = args.inSampleDataLength 
    outsampleLength = args.outSampleDataLength 
    rolls = args.numberRolls 
    step = args.rollStep 
    threshold = args.threshold 
    minStocksPerSector = args.sectorStocks 
    minMarketCap = args.marketCapCutOff 
    minVolume = args.volumeCutOff 
    endDate = datetime.datetime.strptime(args.endDate, "%d-%b-%Y") 


    return insampleLength,outsampleLength,rolls,step,threshold,minStocksPerSector,minMarketCap,minVolume,endDate 


if __name__ == "__main__": 
    print ("AuctionStategy_1.0...25/03/16") 

    try: 
     main()    
    except KeyboardInterrupt: 
     print ("Ctrl+C pressed. Stopping...") 

Antwort

1

Ein einzelner Strich identifiziert immer ein einzelnes Zeichen Argument. Aber Sie versuchen zu definieren -step; Dies wird als -s interpretiert, die später durch das tatsächliche Argument -s neu definiert wird.

Sie sollten entweder eine andere Kennung für "Schritt" auswählen oder immer die Doppelstrichversion --rollStep verwenden.

0

Das Argument -s erwartet eine ganze Zahl, Sie gaben eine Zeichenfolge, dies verursacht den Fehler, den Sie erhalten.

BTW, ich denke, es ist besser, Räume zwischen den Namen der Argumente hinzuzufügen und es Werte, z.B .:

run AuctionStrategy_2.0.py -in 10 -out 5 -rolls 15 -step 3 -t .001 -s 5 -m 100 -v 50 -e '01/01/2016' 

this helps