首页 > 解决方案 > 如何修复 python 脚本中的“int <> 以 10 为底的无效文字”错误

问题描述

我正在运行一个脚本来转换一些媒体文件,当我这样做时脚本返回错误invalid literal for int<> with base 10: line 132。这不是我的脚本,也不是作者支持的,这就是我在这里寻求帮助的原因。

# Make time human-readable
def humanize_time(secs): ## Line:132
    if secs != "N/A":
        mins, secs = divmod(int(secs), 60)
        hours, mins = divmod(mins, 60)
        return '%02d:%02d:%02d' % (hours, mins, secs)
    else:
        mins, secs = divmod(30, 60)
        hours, mins = divmod(mins, 60)
        return '%02d:%02d:%02d' % (hours, mins, secs)


Traceback (most recent call last):
File "C:\conv2mp4-py.py", line 415, in <module>
codec_discovery()
File "C:\conv2mp4-py.py", line 165, in codec_discover
get_duration_temp = humanize_time(head)
File "C:\conv2mp4-py.py", line 132, in humanize_time
mins, secs = divmod(int(secs), 60)
ValueError: invalid literal for int() with base 10: ''

脚本:https ://github.com/BrianDMG/conv2mp4-py/blob/master/conv2mp4-py.py

标签: pythonpython-2.7

解决方案


实现此类功能的正确方法是:

def humanize_time(secs=30):
    mins, secs = divmod(int(secs), 60)
    hours, mins = divmod(mins, 60)
    return '%02d:%02d:%02d' % (hours, mins, secs)

但是在这种情况下,您必须注意传递给它的参数。

如果您无法控制输入,则必须实施异常管理:

def humanize_time(secs=30):
    try: 
        mins, secs = divmod(int(secs), 60)
        hours, mins = divmod(mins, 60)
        return '%02d:%02d:%02d' % (hours, mins, secs)
    except (TypeError, ValueError) as e:
        raise ValueError("Invalid value for 'secs': '" + str(secs) + "'")

print humanize_time(12)  #>> 00:00:12
print humanize_time("a")   #>> ValueError: Invalid value for 'secs': 'a'

推荐阅读