2013-08-19 148 views
0

當我定義一個函數時,它不返回任何值。不過,我已經在IDLE中驗證了函數的代碼,並且它可以工作。哪裏有問題?該文件確實包含我想要獲得的值。當我使用調試器時,執行此功能,它會從'for reader in row'跳轉到最後。我的問題在哪裏?我的代碼:函數不返回值

import re,csv 

F=open('file.csv') 

# `......` 

def prog_rownum(Ref,s): 

    P=[] 
    reader=csv.reader(s) 
    for row in reader: 
     m=re.match(Ref,','.join(row)) 
     if m: 
      P.append(reader.line_num) 
    return P 
# `......` 

P1=prog_rownum('U16',F) 

# `......` 

在文件中的數據(colnum AC)是這樣,比較遺憾的是不特定的信息:

InstPin  Netlist RefDes 

U16:0:NMI  0 U16 

U16:0:O\E\  0 U16 

U16:0:R\S\T\ 0 U16 

U16:0:REF_FREQ 0 U16 

U16:0:REFCLK_C 0 U16 

U16:0:REFCLK_N 0 U16 

U16:0:REFCLK_P 0 U16 

U16:0:RX_N0  0 U16 

U16:0:RX_N1  0 U16 

U16:0:RX_N10 0 U16 

U16:0:RX_N11 0 U16 

U16:0:RX_N12 0 U16 

U16:0:RX_N13 0 U16 

我只是想返回所需的rownum其中包含我需要的信息。

+7

如何測試它你知道它沒有回報價值?給我們一些我們可以重現的東西,至少包括展示問題的樣本數據。 – agf

+0

你試過了嗎:'print P1' –

+0

你確定你的縮進是正確的嗎?特別是沒有標籤和空格的混合? (如果返回行與其他行縮進不同,它可能不會與右側塊關聯) – Randomness

回答

1

這是很難沒有更多的細節,只是說了以下不一樣的功能和更乾淨,可能是它可以解決你的問題:

def prog_rownum(filename, ref): 
    """ Return a list with the line numbers where ref appears in filename """ 
    with open(filename) as f: 
     return [line_num for line_num, line in enumerate(f) 
       if line.startswith(ref)] # alternatively "if ref in line" checks anywhere 

>>> print prog_rownum('file.csv', 'U16') 
[2, 5, 7] 
+0

你傳遞一個你不使用的'filename'變量,我不相信你的輸出 - Python列表看起來像'[2,5,7]',而不是'[2,5,7]'。 – DSM

+0

@ DSM,固定的,輸出是由於那時OP沒有提供測試文件。 – elyase

+0

@elyase,對不起,在我的代碼中,s代表打開的文件,函數代碼中的含義是什麼? – smallsu