2013-08-28 207 views
0

我寫了一個小的Python程序。通過運行main.py每15分鐘執行一次,它只是將2個其他python腳本作爲模塊加載。如果模塊出現故障,Python導入值

問題是當一個模塊發生故障時(例如因爲互聯網連接丟失)該怎麼做。其中一個模塊解析來自互聯網的訂閱源。如果失敗了,它必須承擔一定的價值。問題是將此值導入main.py.

模塊:

[...] 
feed=feedparser.parse(url) 

if not feed.feed: 
    # Assume Error 
    print("Error") 
    Temperature = 20 
    print 'Assuming', Temperature, 'degrees C' 
    sys.exit() 

Temperature = [...] 

當我導致模塊出現故障,該模塊導入後main.py退出。我該如何解決?

我認爲這是由調用sys.exit()引起的,但我不知道我應該調用什麼函數?

謝謝...

+0

你有什麼錯誤嗎?如果是這樣,趕上它們,然後重試導入直到它工作。 –

+1

當然'sys.exit()'會立即退出,沒有錯誤。如果你不想這麼做......你想要做什麼呢?如果你只是想跳過下一段代碼,寫一個'if' /'else'並把下一個代碼放在'else'中。 (或者,更好的是,將它重構爲一個函數,並在'else'中調用它。)但是沒有看到更多的代碼(或更好的[精簡版](http://sscce.org))很難給出更具體的建議。 – abarnert

+0

您正在使用import語句作爲隱式過程調用。這不是模塊的用途。最好將代碼放入函數中並調用函數。此外,更好地處理錯誤情況(如不使用'sys.exit()')。 –

回答

2

python import語句就像任何其他Python代碼一樣是一個表達式。你可以用你的模塊導入在try ... except塊,像這樣:

import somemodule 
try: 
    from someothermodule import Temperature 
except ImportError,e: 
    Temperature = 20 
3

在Python中你可以把它在try except塊:

try: 
    import moduleA 
except ImportError,e: 
    import moduleB 
0

發佈的代碼是差不多了。

main.py:

from temperature import Temperature 
[some code to insert Temperature into SQLite DB] 

temperature.py:

[...] 
feed=feedparser.parse(url) 

if not feed.feed: 
    # Assume Error 
    print("Error") 
    Temperature = 20 
    print 'Assuming', Temperature, 'degrees C' 
    sys.exit() 

Temperature = [...] 

謝謝你的答案那麼遠,我想有沒有辦法很好地退出if語句,並傳遞假設溫度值爲main.py?