2016-07-19 9 views
0

Ich kann den folgenden Code wegen der 7. Zeile value = int(qty)*int(price) nicht ausführen. Ich kann es nur ausführen, wenn ich die int() Funktion innerhalb der print() Funktion verwende. Gibt es eine Möglichkeit, eine Ganzzahl zu definieren, bevor ich sie drucke? Das gleiche für float?Python mit Int-Funktion

file = open("C:\\file.txt","r") 
for mid in file: 
    qty = mid[38:53] 
    qty = qty.lstrip("0") 
    price = mid[75:86] 
    price = price.lstrip("0") 
    value = int(qty)*int(price) 
    trades = [qty,price,value] 
    print (trades) 
file.close() 

Shell ->

ValueError: invalid literal for int() with base 10: ''

+0

Sie können immer frage, ob es eine ganze Zahl ist. Die Zeichenfolge, die Sie übergeben müssen, kann Buchstaben enthalten, die den Compiler als hexadezimal ansehen oder ein "." macht es zu einem float – cjds

+9

Mögliches Duplikat von [ValueError: ungültiges Literal für int() mit der Basis 10: ''] (http://stackoverflow.com/questions/1841565/valueerror-invalid-literal-fo-int-with-base -10) – lonewaft

+1

Sie können nach dem Typ fragen mit type (var) –

Antwort

0

Was passiert, ist, dass einer Ihrer Artikel entweder seinen Preis oder Menge auf 0 gesetzt hat, wenn es in Ihrem Code Streifen gelesen hat, der 0 Sie mit einem leeren verlassen String, wodurch ein ValueError ausgelöst wird, wenn es in einen int konvertiert wird.

Sie sollten wahrscheinlich die lstrips entfernen. Im schlimmsten Fall bekommt man Zahlen wie "04", die der int-Konstruktor sowieso verarbeiten kann.

0

die folgende Funktion den ganzzahligen Wert oder Keine bei Rückkehr der String nicht gültig integer:

def parseInt(ss): 
    try: 
     return int(ss) 
    except: 
     return None 

Mit dieser Funktion zu überprüfen, ob der String eine ganze Zahl ist:

for mid in file: 
    qty = mid[38:53] 
    qty = qty.lstrip("0") 
    qty = parseInt(qty) 

    price = mid[75:86] 
    price = price.lstrip("0") 
    price = parseInt(price) 

    if qty != None and price != None: 
     value = qty*price 
     trades = [qty,price,value] 
     print (trades) 
file.close()