首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使在删除/注释错误行时,错误也不会消失。

即使在删除/注释错误行时,错误也不会消失。
EN

Stack Overflow用户
提问于 2022-01-25 11:46:36
回答 3查看 94关注 0票数 2

我正在Windows 10的虚拟机上使用Linux。

我从IPython下载了一本工具笔记本

现在,当我试图运行代码的某些部分时,会出现以下错误:

代码语言:javascript
复制
/usr/lib/python3.8/distutils/version.py in _cmp(self, other)
    335         if self.version == other.version:
    336             return 0
--> 337         if self.version < other.version:
    338             return -1
    339         if self.version > other.version:

TypeError: '<' not supported between instances of 'str' and 'int'

由于我不知道,为了解决这个问题,我决定只编辑这个version.py文件(也许不太聪明,但我不知道还能做什么……)

我只是决定评论错误的线路,并返回0,每次。

现在,奇怪的是,我仍然在评论中看到同样的错误:

代码语言:javascript
复制
 /usr/lib/python3.8/distutils/version.py in _cmp(self, other)
        335         # if self.version == other.version:
        336         #     return 0
    --> 337         # if self.version < other.version:
        338         #     return -1
        339         # if self.version > other.version:

TypeError: '<' not supported between instances of 'str' and 'int'

现在,我测试了如果我只添加了一些空的新行会发生什么,错误看起来如下(指向同一行,其中没有任何内容):

代码语言:javascript
复制
  /usr/lib/python3.8/distutils/version.py in _cmp(self, other)
        335         
        336           
    --> 337         
        338             
        339         

    TypeError: '<' not supported between instances of 'str' and 'int'

我只是无法解释这里发生了什么,我希望有人有一个想法。

完整的回溯是:

代码语言:javascript
复制
TypeError                                 Traceback (most recent call last)
/tmp/ipykernel_2888/2193680867.py in <module>
      1 fastqdir = os.path.join(resultsdir, './FASTQ_files/')
      2 print("Downloading FASTQ files from the SRA...")
----> 3 dms_tools2.sra.fastqFromSRA(
      4         samples=samples,
      5         fastq_dump='/home/andreas/sratoolkit.2.11.0-ubuntu64/bin/fastq-dump',

~/.local/lib/python3.8/site-packages/dms_tools2/sra.py in fastqFromSRA(samples, fastq_dump, fastqdir, aspera, overwrite, passonly, no_downloads, ncpus)
     91                               .decode('utf-8').split(':')[-1].strip())
     92     fastq_dump_minversion = '2.8'
---> 93     if not (distutils.version.LooseVersion(fastq_dump_version) >=
     94             distutils.version.LooseVersion(fastq_dump_minversion)):
     95         raise RuntimeError("fastq-dump version {0} is installed. You need "

/usr/lib/python3.8/distutils/version.py in __ge__(self, other)
     68 
     69     def __ge__(self, other):
---> 70         c = self._cmp(other)
     71         if c is NotImplemented:
     72             return c

/usr/lib/python3.8/distutils/version.py in _cmp(self, other)
    335         if self.version == other.version:
    336             return 0
--> 337         if self.version < other.version:
    338             return -1
    339         if self.version > other.version:

TypeError: '<' not supported between instances of 'str' and 'int'
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-01-25 12:27:41

问题是你的fastq转储版本。查看从sra.py生成错误的源代码

代码语言:javascript
复制
fastq_dump_version = (subprocess.check_output([fastq_dump, '--version'])
                          .decode('utf-8')
                          .replace('"fastq-dump" version', '').split(':'))
    if len(fastq_dump_version) == 1:
        fastq_dump_version = fastq_dump_version[0].strip()
    elif len(fastq_dump_version) == 2:
        fastq_dump_version = fastq_dump_version[1].strip()
    else:
        fastq_dump_version = (subprocess.check_output([fastq_dump, '--help'])
                              .decode('utf-8').split(':')[-1].strip())
    fastq_dump_minversion = '2.8'
    if not (distutils.version.LooseVersion(fastq_dump_version) >=
            distutils.version.LooseVersion(fastq_dump_minversion)):
        raise RuntimeError("fastq-dump version {0} is installed. You need "
            "at least version {1}".format(fastq_dump_version, 
            fastq_dump_minversion))

有一个关于fastq-dump --version输出的假设,即在输出版本之前有一个:。但是,2.11的情况并非如此,子进程调用的结果如下:

代码语言:javascript
复制
>>> (subprocess.check_output(['sratoolkit.2.11.0-ubuntu64/bin/fastq-dump', '--version']).decode('utf-8').replace('"fastq-dump" version', '').split(':'))
['\n"sratoolkit.2.11.0-ubuntu64/bin/fastq-dump" version 2.11.0\n\n']

然后,该字符串用于进一步的版本比较,distutils抱怨无法将其与保存在fastq_dump_minversion中的版本2.8进行比较。

解决这个问题的最简单方法是使用sra工具包的另一个版本。版本2.9应该可以工作,因为版本输出似乎与预期相符:

代码语言:javascript
复制
>>> (subprocess.check_output(['sratoolkit.2.9.0-ubuntu64/bin/fastq-dump', '--version']).decode('utf-8').replace('"fastq-dump" version', '').split(':'))
['\nsratoolkit.2.9.0-ubuntu64/bin/fastq-dump ', ' 2.9.0\n\n']

附加信息

为什么改变lib/python3.7/distutils/version.py不起作用呢?lib/python3.7/distutils/__pycache__中有一个预编译的文件正在被读取,或者是实际的lib/python3.7/distutils/version.py。如果编辑version.py,则应删除__pycache__ dir中的协同响应文件。不过,请注意,我强烈建议不要处理这些文件,,因为如果您不知道自己在做什么,您可以很容易地破坏您的python。

P.S.

这应该在dms_tools版本2.6.11中得到修正

票数 1
EN

Stack Overflow用户

发布于 2022-01-25 11:56:37

首先,错误TypeError: '<' not supported between instances of 'str' and 'int'意味着在条件检查中使用的操作数之一是字符串数据类型,另一个操作数是整数数据类型。

通过使用type()函数,您可以检查什么是什么。

接下来,您可以使用mv命令重命名文件,然后使用以下方法再次运行:

代码语言:javascript
复制
python <filename.py>
票数 -1
EN

Stack Overflow用户

发布于 2022-01-25 11:58:57

简而言之:您正在尝试比较两种不同的数据类型。如果您确信这两个值都是数字,则可以在比较之前转换该值:

代码语言:javascript
复制
if int(self.version) < int(other.version):
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70848105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档