关于Termux使用you-get下载B站报错ValueError: Sign not allowed in string format specifier解决方案

博主在Termux更新you-get后下载B站视频报错,经探索给出两种解决方案。方案一是注释报错代码,但会使进度条损坏;方案二是缩小字体,让内容显示全,可解决报错问题。最终建议先缩小字体,不行再注释代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言(都是废话,想看最终结果自己跳转到总结)

说起来挺离谱的,我用Termux挺长时间了,曾经用you-get下载B站视频都是无往不利的,但最近更新you-get后下载B站视频就莫名其妙报错,而用电脑下就毫无压力,这能忍吗?当然不能,所以我决定和这个bug一刚到底。最后的解决方案也是让我当场破防,无语凌噎。

环境介绍

Termux版本:0.118.0
you-get版本:0.4.1612
报错代码:

ValueError: Sign not allowed in string format specifier

** 小贴士 **
查看you-get报错方式:在you-get命令后加--debug(注意空格)
举例:
you-get --debug 视频网址

报错代码图片

过程分析

方案1

当我看见这个关于format报错的时候,我就直接打算打开you-get相关的源码看看,根据报错:输入vim /data/data/com.termux/files/usr/lib/python3.10/site-packages/you_get/common.py并跳转到869行。
以下为那一行报错代码所在函数的具体代码:

def update(self):
        self.displayed = True
        bar_size = self.bar_size
        percent = round(self.received * 100 / self.total_size, 1)
        if percent >= 100:
            percent = 100
        dots = bar_size * int(percent) // 100
        plus = int(percent) - dots // bar_size * 100
        if plus > 0.8:
            plus = '█'
        elif plus > 0.4:
            plus = '>'
        else:
            plus = ''
        bar = '█' * dots + plus
        # 下面这一行代码报错
        bar = self.bar.format(
            percent, round(self.received / 1048576, 1), bar,
            self.current_piece, self.total_pieces, self.speed
        )
        sys.stdout.write('\r' + bar)
        sys.stdout.flush()

通过它给出的变量和前后对比,不难看出,这不就是进度条嘛,第一个解决方案就立刻出来了,直接把报错的那一行代码注释掉就完工了。果不其然,注释掉后能下载视频了
** 注释代码后的函数 **
注释代码后的函数
** 注释代码后的运行截图 **
注释代码后的运行截图
能跑了,但是进度条坏了,并不完美。

方案2

没有进度条这种事情下短视频还好,长视频就难受了,都不知道下载到哪了,所以我放弃了方案1,进而我又去查了一下错误代码所指向的那个format字符串的源代码,又想到报错的内容

self.bar = '{:>4}%% ({:>%s}/%sMB) ├{:─<%s}┤[{:>%s}/{:>%s}] {}' % (
            total_str_width, total_str, self.bar_size, total_pieces_len,            total_pieces_len        )

看见这个字符串后我想到了一个很离谱的方式,把字体缩小,说不一定就能显示了呢?然后我测试了一下,还真成了,这就很离谱。
** 字体缩小后的下载显示 **
字体缩小后的下载显示
** 小贴士:字体放大缩小方式 **
字体放大缩小展示
到这里,基本可以肯定解决方案了,这个报错是内容显示不全导致的,只要适当缩小字体,就能解决这个问题(不用像我这样缩小的这么小)。

总结

解决方案就是缩小字体(缩小字体的方式上面那个动图展示的),小到能显示进度条就行。
如果实在不行,就把报错的那一行注释掉(具体注释内容看过程分析的方案1),没进度条,就肯定不能报错了。
最后我只想说报错并不可怕,可怕的是不想思考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zzhdzs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值