Converting from string to integer to solve the ( ValueError: invalid literal for int() with base 10: '' ) error message in Python

Converting from string to integer to solve the ( ValueError: invalid literal for int() with base 10: '' ) error message in Python

我有一个python代码,有不同的功能,代码有不同的功能和主要功能。 主要功能如下:


    def main():
        while True:
            ch = menu(['Soil Analysis and Yield Prediction','Supervised Learning','Unsupervised Learning','Exit'])
            print('\n\n')
            if ch==3:
                break
            elif ch==1:
                Sup()
            elif ch==2:
                Usup()
            else:
                stdout.write('\nINVALID RESPONSE, TRY AGAIN .........\n\n')
            #print('{:^204s}'.format('*'*204))
        print('\n\n')
        print('{:^204s}'.format('Authors:\tKshitij Jaiswal, Vibhav , Gaurav Khattar\n'))
        print('{:^204s}'.format('THANKS YOU FOR USING OUR SOFTWARE'))
    
    if __name__=='__main__':
        main()

当用户输入1时,将调用某些函数,如果用户输入2,则调用其他函数。

当我 运行 程序时,出现此错误:

ValueError                                Traceback (most recent call last)
<ipython-input-11-6292cf16da20> in <module>
     17 
     18 if __name__=='__main__':
---> 19     main()
     20 

<ipython-input-11-6292cf16da20> in main()
      1 def main():
      2     while True:
----> 3         ch = menu(['Soil Analysis and Yield Prediction','Supervised Learning','Unsupervised Learning','Exit'])
      4         print('\n\n')
      5         if ch==3:

<ipython-input-10-2a274c21fe19> in menu(x)
      6         print(str(i)+'.',x[i])
      7     stdout.write('\n\nEnter your Choice:\t')
----> 8     return int(stdin.readline())

ValueError: invalid literal for int() with base 10: ''

而函数menu()如下:

def menu(x):
    print('*'*204)
    print('{:^204s}'.format(x[0]))
    print('\n\n')
    for i in range(1,len(x)):
        print(str(i)+'.',x[i])
    stdout.write('\n\nEnter your Choice:\t')
    return int(stdin.readline())

我尝试 return int(float(stdin.readline()) 但它没有用。请提供任何帮助。

你不需要使用 stdout 和 stdin 来实现你想要的,你可以使用 input 而不是它们:

def menu(x):
    print('*'*204)
    print('{:^204s}'.format(x[0]))
    print('\n\n')
    for i in range(1,len(x)):
        print(str(i)+'.',x[i])
    return int(input('\n\nEnter your Choice:\t'))

如果您 运行 通过某种 IDE 甚至 Jupyter 编写代码,程序可能会向您的应用发送信号,这会影响您的输入。

这是当我将以下循环放入我的 Jupyter notebook 时发生的情况(直到我停止它):

i = 0
while True:
    i += 1
    print(stdin.readline())
    print(i)

输出:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25
...

另请查看本文以更好地了解输入和标准输入之间的区别

https://www.geeksforgeeks.org/difference-between-input-and-sys-stdin-readline/