max_width = int(input())ValueError:int()的基数为10的无效文字:''

时间:2018-02-24 07:57:32

标签: python python-3.6

我正在尝试编写一个以字符串和宽度作为输入并提供输入的程序:

ABCDEFGHIJKLIMNOQRSTUVWXYZ 4 并给出一个输出(在换行符中): ABCD \ n EFGH \ n IJKL \ n IMNO \ n QRST \ n UVWX \ n YZ

我写了这段代码:

def wrap(string, max_width):
    while 0 < len(string) < 1000 and 0 < max_width < len(string):
        print (textwrap.fill(string,max_width))

while True:
    try:
        string = input()
        max_width = int(input())
    except EOFError:
        print("EOFError")
        break

我该怎么做才能解决这个问题,我还是编程新手。我得到的错误信息是:

Original exception was:
Traceback (most recent call last):
  File "try2.py", line 8, in <module>
    max_width = int(input())
ValueError: invalid literal for int() with base 10: ''

1 个答案:

答案 0 :(得分:1)

每个input()“消耗”整行。您需要将其拆分为2 将其输入为两行。如果您在1行中输入全部并且返回两次返回,则会出现错误,int(input())成为要转换的空字符串文字,这会引发ValueError - 而不是EOFerrorhttps://docs.python.org/3/library/exceptions.html

我添加了对它们的处理,错误的解析输出“helptext”,空行退出

拆分版本:'ABCDEFGHIJKLIMNOQRSTUVWXYZ 4'

def wrap(string, max_width):
    print('\n'.join( [ string[i:i+max_width] for i in range(0,len(string),max_width) ]) )

while True:
    try:
        s = input()               #   ABCDEFGHIJKLIMNOQRSTUVWXYZ 4 + return
        if not s:
            print("Empty input quits program.")
            break
        spl = s.split()    

        string, max_width = spl[0], int(spl[1])
    except ValueError: 
        print("ValueError: place text and spacing into 1 line, separated by space")
        continue
    except IndexError:
        print("ValueError: place text and spacing into 1 line, separated by space")
        continue
    wrap(string,max_width)

应该有效。列表表达式从您的输入开始创建切片,从[0:0+max_width]开始,并按max_width将其与'\n'连接,以便打印输出。

两个输入版本:'ABCDEFGHIJKLIMNOQRSTUVWXYZ''4'在不同的行中:

def wrap(string, max_width):
    print('\n'.join( [ string[i:i+max_width] for i in range(0,len(string),max_width) ]) )

while True:
    try:
        string = input()             #   ABCDEFGHIJKLIMNOQRSTUVWXYZ + return
        if not string:
            print("Empty input quits program.")
            break
        max_width = int(input())     #   4 + return
    except ValueError:
        print("ValueError: place text into 1 line, number into next line")
        continue
    wrap(string,max_width)