簡體   English   中英

從文件讀取時發生ValueError

[英]ValueError when reading from a file

我有一個python腳本,該腳本從文件devices.txt中讀取項目,然后填充字典。 現在,該文件具有以下結構:

uniqueId,RoomLabel,Label,State,Frequency

例如:

1001,lounge,lamp,False,6789

現在,當python單獨讀取時,就可以了。 但是,當我進一步填充文件時:

1001,lounge,lamp,False,5169,1002,lounge,tv,False,6789

它吐出:

unId = int(value[0])
ValueError: invalid literal for int() with base 10: ''

這是在程序此點運行的代碼:

with open("devices.txt") as file:
for line in file:
    value = line.rstrip('\n').split(",")
    unId = int(value[0])
    rmLabel = value[1]
    label = value[2]
    state = value[3]
    freq = int(value[4])
    irTable[unId] = rmLabel, label, state, freq

考慮到這一點,我看不到在哪里找到以10為底的int(),我在數學上很糟糕,但是據我了解,因為它以10為底,所以它會看到一個小數正確?

錯誤消息ValueError: invalid literal for int() with base 10: ''表示以下含義:

您要求Python通過調用int()將對象轉換為整數。

因為您沒有指定基數,所以它假定默認值為10 (十進制)(例如,您可以通過指定16的基數來告訴它解析十六進制數字: int('ff', 16) )。 導致此異常的值是'' (空字符串)。 因此,不能使用以10為底的空字符串(在這種情況下為任何其他基)將空字符串''轉換為整數。

在該異常的正上方顯示了對int()調用發生的確切代碼行:

unId = int(value[0])

因此,您知道在某些時候value[0]等於''

造成這種情況的原因很可能是您的*.csv文件中包含空白字段或空白行。 打印linevalue以查看發生了什么。

這應該可以幫助您找出代碼和/或數據中的問題,以及如何讀取Python異常。 但是,修復此錯誤之后,您應該真正使用內置的csv模塊來解析CSV文件,如@Joran Beasley建議的那樣。

from csv import DictReader

print list(DictReader(open("devices.txt")))

對我來說似乎容易多了

它正在嘗試將以逗號分隔的行上的第0個值轉換為整數(使用10為底,但該底可能不相關。)此錯誤很可能意味着實際位於第0個位置的字符串該行不是可識別的數字(例如,您的devices.txt格式可能不正確,以某行開頭為lounge,lamp,False, ...而不是數字,或者id字段有時為空(例如,lounge,lamp,... )。

錯誤消息ValueError:int()以10為底的無效文字:``''表示以下含義:

您要求Python通過調用int()將對象轉換為整數。

解決此問題的一種方法是執行以下操作:將value轉換為字符串,然后使用如下的replace()方法。

value = value.replace(' ', '') 

注意:您可以在''的第一組中插入任何內容。 這將用第二個''中的任何內容替換它。 如果要刪除第二組,請確保將其保留為空格或字符。

對每個不能轉換為整數的單個字符執行此操作。 其中包括:!@#$%^&*()_ + {} []“:;'?> <,。/ | + =-

要找出哪些字符可能無法轉換為整數,請執行以下操作:

print(repr(value))

這將顯示您的所有角色。 只需對任何無法轉換的地方使用replace方法。

希望這可以幫助 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM