为什么我的python代码显示值错误?

2024-09-23 04:28:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我写这段python代码是为了检查DNA序列文件。输出将是与此DNA匹配的人的姓名。 此链接包含分配的说明。 https://cs50.harvard.edu/x/2020/psets/6/dna/ 但是当我试图运行代码时,它显示的值是错误的

请有人告诉我代码中的错误。 我对编程一无所知

from sys import argv, exit
import csv

def max_Reptitions_of_substrings(dnaSequences , substring):
 arr = [0] * len(dnaSequences)
 for i in range(len(dnaSequences) - len(substring), -1, -1):
     if dnaSequences[i: i + len(substring)] == substring:
       if i + len(substring) > len(dnaSequences) - 1:
           arr[i] = 1
       else:
           arr[i] = 1 + arr[i + len(substring)]
 return max(arr)

def print_Matching(reading, newdata):
    for i in reading:
        human = i[0]
        value = [int(digit) for digit in i[1:]]
        if value == newdata:
         print(human)
         return
    print("No match")


def main():
  if len(argv) != 3:
      print("Missing Command line Argument")
      exit(1)
  
with open(argv[1], 'r') as database:
       reading = csv.reader(database)
       sequences = next(reading)[1:]
   
with open(argv[2], 'r') as sequenceFilestrong text:
    dnaSequences = sequenceFile.read() 
    newdata = [max_Reptitions_of_substrings(dnaSequences, substr) for substr in sequences]
    print_Matching(reading, newdata)


显示的值错误如下所示


Traceback (most recent call last):
  File "dna.py", line 36, in <module>
    print_Matching(reading, newdata)
  File "dna.py", line 15, in print_Matching
    for i in reading:
ValueError: I/O operation on closed file.

Tags: 代码inforlenif错误substringdna
3条回答

该错误消息非常明确,具体如下:

ValueError: I/O operation on closed file.

您正在with块中打开CSV文件,并基于该文件创建新的CSV读取器。但是在with块的末尾,文件被关闭reading现在指的是链接到关闭的文件连接的CSV读取器

因此出现了错误

with open(argv[1], 'r') as database:
       reading = csv.reader(database)
       sequences = next(reading)[1:]

此代码块显示csv读取器已关闭

试着看看代码缩进,它在Python中非常重要。带有的第一个应位于功能主内,带有的第二个应位于带有的第一个内。 为什么? 看看代码。在打印匹配中,您使用的是读取csv.reader,它现在尝试使用已关闭的文件作为参数传递

相关问题 更多 >