![](/img/trans.png)
[英]How to skip error and continue to run for loop and continue to the next line
[英]Python ignore and skip error line, and continue with the next line
我試過的:
import simplejson
import pandas as pd
with open('/tmp/test.json') as f:
try:
data = pd.DataFrame(simplejson.loads(line) for line in f)
except Exception as e:
pass
data.to_csv('/tmp/data.csv')
然后我收到錯誤消息:
NameError: name 'data' is not defined.
我應該怎么做才能解決這個問題?
這意味着您成功地捕獲了錯誤並進入了except
語句中的條件,因此您的數據永遠不會被加載並且變量data
永遠不會被定義。 然后當您嘗試將數據保存到 csv 時,會觸發錯誤。
您應該做的是將您的to_csv
語句也放入try-except
中:
import simplejson
import pandas as pd
with open('/tmp/test.json') as f:
try:
data = pd.DataFrame(simplejson.loads(line) for line in f)
data.to_csv('/tmp/data.csv')
except Exception as e:
pass
此外,在 Python 中, except Exception as e: pass
,這是一個可怕的反模式。 這將導致代碼幾乎無法調試,因為您正在捕獲可能發生的每一個錯誤,而不是您期望發生的錯誤。 當您這樣做時,您應該記錄完整的錯誤堆棧或將其打印到控制台以了解您正在捕獲的確切錯誤:
try:
data = pd.DataFrame(simplejson.loads(line) for line in f)
except Exception as e:
err = str(e)
print(err)
或者您應該捕捉到您希望在這里發生的特定錯誤:
try:
data = pd.DataFrame(simplejson.loads(line) for line in f)
except FileNotFoundError:
pass
為了更好地解釋,這里你的程序是如何在內部運行的,
內部嘗試塊:
首先 pd.Dataframe 被實例化
some_memory_loc STORES pd.DataFrame(simplejson.loads(line) for line in f)
然后data
變量保存 memory 地址和類型為 DataFrame:
data = some_memory_loc AND TYPE(data) = pd.DataFrame
然后程序移出try catch塊
現在,在您的案例中實際發生的是,在第一步中,程序會生成一個異常。 因此直接運行到 except 塊。 所以第二步從未執行。 因此,您的 python 程序不知道什么是data
。
我希望你已經理解,因此可以自己解決。
將data.to_csv("/tmp/data.csv")
放在try
語句中,或者在except
語句中添加代碼以在數據行上拋出異常時以其他方式創建數據 object(並且它不會創建數據對象)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.