2016-04-08 53 views
2

我使用代碼從一個人Python:文件不存在。確保正確的文件名

import sys 
try: 
    filename = sys.argv[1]; 
    represent_points = int(sys.argv[2]); 
    delimeter = sys.argv[3]; 
    if (delimeter=="space"): 
     delimeter = " "; 
    if (delimeter=="tab"): 
     delimeter = "\t"; 
    f = open(filename+".txt","r"); 
except: 
    sys.exit("File not exists. Make sure of the right filename"); 
from string import * 
import degree_sampling 
degree_sampling.degree_sampling(filename,represent_points,delimeter); 

[email protected]:~/KSCnet_Linux/Python_Code$ python trialrun.py datan 21 
File not exists. Make sure of the right filename 

這是不正確

[email protected]:~/KSCnet_Linux/Python_Code$ stat datan.txt 
    File: ‘datan.txt’ 
    Size: 65   Blocks: 8   IO Block: 4096 regular file 
Device: 801h/2049d Inode: 3670784  Links: 1 
Access: (0664/-rw-rw-r--) Uid: (1000/ milenko) Gid: (1000/ milenko) 
Access: 2016-04-08 10:54:23.695416155 -0300 
Modify: 2016-04-08 10:54:23.695416155 -0300 
Change: 2016-04-08 10:54:23.695416155 -0300 
Birth: - 

我該怎麼辦呢?

+1

的'except'的捕捉每一個例外。所以不能確定問題出在打開的文件上。它可能甚至與'sys.argv [3]'不存在或任何東西。嘗試更改例外 –

+2

您應該使用'except IOError:'專門捕獲文件不存在導致的錯誤 – wnnmaw

回答

2

python trailrun.py datan 21只有2個參數,但腳本有:

delimeter = sys.argv[3] 

如果選中我相信,你會看到一個IndexError因爲你試圖訪問不存在中的索引中的差錯sys.argv。您應該提供正確數量的參數,或嘗試處理第三個參數未提供給腳本的情況。

此外,檢查出ArgParse。這是Python提供的用於在腳本中創建命令行參數的API。

1

正如一位評論者指出的可能是這個問題,你錯過了最後一個參數,即分隔符。嘗試:

python trialrun.py datan 21 space 

另外,作爲另一位評論者指出,爲了不被未來這個困惑,你應該只捕獲預期的錯誤。替換此:

except: 

有了這個:

except IOError: 
+0

是的,它可以與IOError除外: –