天道酬勤,学无止境

在整数用户输入中打印消息而不是 valueerror ?(Printing message rather than valuerror in an integer user input?)

问题

我有一个十进制到二进制转换器,如下所示:

print ("Welcome to August's decimal to binary converter.")
while True:
    value = int(input("Please enter enter a positive integer to be converted to binary."))
    invertedbinary = []
    initialvalue = value
    while value >= 1:
        value = (value/2)
        invertedbinary.append(value)
        value = int(value)
    for n,i in enumerate(invertedbinary):
        if (round(i) == i):
            invertedbinary[n]=0
        else:
            invertedbinary[n]=1
    invertedbinary.reverse()
    result = ''.join(str(e) for e in invertedbinary)
    print ("Decimal Value:\t" , initialvalue)
    print ("Binary Value:\t", result)

用户输入立即声明为整数,因此除输入的数字以外的任何内容都会终止程序并返回ValueError 。 我怎样才能让它打印一条消息而不是程序以ValueError终止?

我尝试从我的二进制到十进制转换器中采用我使用的方法:

for i in value:
        if not (i in "1234567890"):

我很快意识到这不起作用,因为value是整数而不是字符串。 我在想我可以将用户输入保留在默认字符串,然后将其转换为int但我觉得这是一种懒惰和粗糙的方式。

但是,我是否认为我在用户输入行之后尝试添加的任何内容都不起作用,因为程序将在到达该行之前终止?

还有其他建议吗?

回答1

您需要使用try/except块处理ValueError异常。 你的代码应该是这样的:

try:
    value = int(input("Please enter enter a positive integer to be converted to binary."))
except ValueError:
    print('Please enter a valid integer value')
    continue  # To skip the execution of further code within the `while` loop

如果用户输入任何无法转换为int ,它将引发ValueError异常,该异常将由except块处理并打印您提到的消息。

阅读 Python:错误和异常以获取详细信息。 根据文档, try语句的工作方式如下:

  • 首先, try子句( tryexcept关键字之间的语句)被执行。
  • 如果没有异常发生,则跳过except子句并完成try语句的执行。
  • 如果在执行try子句期间发生异常,则跳过该子句的其余部分。 然后如果它的类型与以except关键字命名的异常匹配,则执行except子句,然后在try语句之后继续执行。
  • 如果发生与except子句中指定的异常不匹配的异常,则将其传递给外部try语句; 如果未找到处理程序,则这是一个未处理的异常,执行将停止并显示如上所示的消息。
回答2

我认为在这些情况下被认为是最Pythonic 的方法是将可能在 try/catch(或 try/except)中获得异常的行换行,并在遇到ValueError异常时显示正确的消息:

print ("Welcome to August's decimal to binary converter.")
while True:
    try:
        value = int(input("Please enter enter a positive integer to be converted to binary."))
    except ValueError:
        print("Please, enter a valid number")
        # Now here, you could do a sys.exit(1), or return... The way this code currently
        # works is that it will continue asking the user for numbers
        continue

您拥有的另一个选项(但比处理异常慢得多)是,不是立即转换为int ,而是使用字符串的 str.isdigit() 方法检查输入字符串是否为数字并跳过循环(使用 continue声明)如果不是。

while True:
    value = input("Please enter enter a positive integer to be converted to binary.")
    if not value.isdigit():
        print("Please, enter a valid number")
        continue
    value = int(value)

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 在汇编 ci20 段错误中提示用户输入(Prompting for user input in assembly ci20 seg fault)
    问题 我目前正在 ci20 机器上开发一个小程序,提示用户输入一个整数值,然后将该值打印到屏幕上。 我当前的代码 .data prompt: .asciiz "Please enter an integer: " message: .asciiz "\nValue entered: " .text .global main main: addiu $sp, $sp, -4 # push stack sw $ra, ($sp) # save return address addi $v0, $0, 4 la $a0, prompt syscall # printing prompt addi $v0, $0, 5 syscall # get user input move $t0, $v0 # save input in $t0 move $a0, $v0 addi $v0, $0, 1 # Not sure if this is right to print message la $a0, message # Not sure if this is right to print message syscall lw $ra, ($sp) # restoring $sp addiu $sp, $sp, +4 # release the stack space used for $sp
  • 在汇编 ci20 段错误中提示用户输入(Prompting for user input in assembly ci20 seg fault)
    问题 我目前正在 ci20 机器上开发一个小程序,提示用户输入一个整数值,然后将该值打印到屏幕上。 我当前的代码 .data prompt: .asciiz "Please enter an integer: " message: .asciiz "\nValue entered: " .text .global main main: addiu $sp, $sp, -4 # push stack sw $ra, ($sp) # save return address addi $v0, $0, 4 la $a0, prompt syscall # printing prompt addi $v0, $0, 5 syscall # get user input move $t0, $v0 # save input in $t0 move $a0, $v0 addi $v0, $0, 1 # Not sure if this is right to print message la $a0, message # Not sure if this is right to print message syscall lw $ra, ($sp) # restoring $sp addiu $sp, $sp, +4 # release the stack space used for $sp
  • 我将如何在 python 中创建自定义错误消息(How would i make a custom error message in python)
    问题 在我正在制作的 python 程序中,我希望它只接受整数,如果它得到一个字符串,请说“系统出现错误”。 而不是抱怨用户无法理解的毫无意义的信息 回答1 使用try-except块捕获错误并使用raise语句说出您选择的错误消息: try: a = int(input()) except: raise Exception('There has been an error in the system') 回答2 您需要使用try except块来捕获错误 - 请参阅文档。 然后你可以只print一条消息,并在必要时退出程序: try: value = int(input("Enter an integer: ")) except ValueError: print("There has been an error in the system.") input() # To let the user see the error message # if you want to then exit the program import sys sys.exit(1) 回答3 使用try , except和raise 由于ValueError继承自Exception类,因此创建ValueError对象时的第一个参数是它打印的消息: try: int("string") #the
  • 如何在 Python 3.2 中检查整数?(How to check for an integer in Python 3.2?)
    问题 我正在尝试编写一个程序,其中用户输入一个两位整数,输出是打印第一个数字指示的次数的第二个数字。 这是我到目前为止所拥有的: number = input('Type two-digit integer \n') a = int(number)//10 b = int(number)%10 if len(number) != 2: print(number, 'is not a two-digit integer') else: print(a*str(b)) 当我对此进行测试时,只要有人输入数字,它就会按照我的意图执行。 如果有人输入,比如说,6r,会弹出一条错误消息说: a = int(number)//10 ValueError:int() 的无效文字,基数为 10:'6r' 所以我假设需要在代码的第二行中放入一些东西来测试输入是否实际上是一个整数,我该怎么做? 我最好以不同的方式重写它吗? 请记住,我正在学习 Python 的入门课程,这是一个关于我正在参加的期中练习的问题,所以如果我必须在真正的期中回答这样的问题,我不能使用很多复杂的过程。 这是我尝试过的东西,如果有人输入不是整数的东西,但由于某种原因,我不知道它为非整数为整数提供了相同的消息,并且不会按我的意图运行: number = input('Type two-digit integer \n') if
  • 如何使用Python中的输入输入整数(How do you input integers using input in Python)
    问题 我正在尝试自学如何使用Python进行编码,这是我第一次在Stack Overflow上发帖,因此,请原谅本文中的任何不当之处。 但是,让我们开始吧。 我正在尝试使用输入命令返回一个整数。 我也已经完成了研究,因此以下是我在Python 3.4中的多次尝试以及随之而来的结果: 尝试#1 guess_row = int(input("Guess Row: ")) 我得到以下信息: Traceback (most recent call last): File "<input>", line 1, in <module> ValueError: invalid literal for int() with base 10: 'Guess Row: 2` 尝试#2 guess_row = float(input("Guess Row: ")) 我得到以下信息: Traceback (most recent call last): File "<input>", line 1, in <module> ValueError: could not convert string to float: "Guess Row: 2"" 尝试#3 try: guess_row=int(input("Guess Row: ")) except ValueError: print("Not an
  • 手写2000行《python从入门到实践》全部语法习题答案
    #1-1 python.org :浏览 Python 主页( http://python.org/ ),寻找你感兴趣的主题。你对 Python 越熟悉,这个网站对你来说就越有用。 老实说不怎么看得懂 #1-2 输入错误 :打开你刚创建的文件 hello_world.py ,在代码中添加一个输入错误,再运行这个程序。输入错误会引发错误吗?你能理解显示的错误消息吗?你能添加 #一个不会导致错误的输入错误吗?你凭什么认为它不会导致错误? print("Hello Python world!") prinf("error") 1.会引发 2.理解 3.可以 4.我的经验 你的经验 编译器牛逼 #1-3 无穷的技艺 :如果你编程技艺无穷,你打算开发什么样的程序呢?你就要开始学习编程了;如果心中有目标,就能立即将新学到的技能付诸应用;现在正是草拟 #目标的大好时机。将想法记录下来是个不错的习惯,这样每当需要开始新项目时,都可参考它们。现在请花点时间描绘三个你想创建的程序。 1.siri 小冰 小娜 天猫精灵 live2d交互 多合一 (手写女朋友)就是适用于PC加手机端的 个人信息智能管理系统 2.个人博客移动端 3.论坛移动端 #2-1 简单消息: 将一条消息存储到变量中,再将其打印出来。 message = input("输入任何数据") print(message) #2-2
  • 在 MIPS 中铸造(Casting in MIPS)
    问题 我有一个有趣的问题! 我在 MIPS 中实现了一个记忆游戏,游戏开始时在屏幕上随机打印一个 10-99 之间的数字,然后要求用户输入确切的数字。 如果用户正确输入数字,游戏将继续显示第一个数字和第二个随机生成的 10-99 数字。 并且这两个数字必须一个接一个地显示,它们之间有 3 秒的延迟。 然后要求用户按照数字出现在屏幕上的正确顺序输入数字。 如果用户正确输入了两个数字,游戏将继续输入三个数字,然后是四个,依此类推。 这是游戏的快速总结,但事情就是这样。 我想添加一个助手选项,如果用户输入字母 'H' ,程序会给他一个提示。 我用它来从接受数字的用户那里获取输入 里 $v0,5 系统调用 这个“读取一个整数”但是一旦用户输入一个“H”,它就会给出一个运行时错误, 我虽然'H'的值是:ASCII中的72,我把它作为用户用作提示的数字,但不幸的是,程序可能会生成一个随机数'72',当用户输入它时,它给了他一个提示,而他不想要这个提示,他只想继续游戏 问题: 我正在寻找的是一种用高级语言进行这种转换的方法或任何技巧。 直到现在我找不到任何方法来解决这个问题。 有没有办法在 MIPS 中清除屏幕或控制台? 因为显然这是记忆游戏! 所以数字应该消失! 对此有任何建议或问题,完全欢迎! 回答1 当从键盘输入到内存时,所有字符都可以表示为 ascii,但read
  • Python断言风格(Python assertion style)
    问题 我想知道我在做什么是一种适当的断言方法。 我正在尝试为 Python 的样式指南制作既简洁又非常正确的东西。 try: assert self.port_number == 0 assert self.handle == None assert isinstance(port_number, int) or isinstance(port_number, float) assert port_number > 0 except AssertionError: return -1 *body of code* return 0 以上是我的代码摘录,显示了我如何处理参数断言。 您可以假设我已经涵盖了所有必要的断言,并且输入是 port_number。 这被认为是好的风格吗? 有没有更好的办法? 回答1 如果调用函数期望成功时输入 0,失败时输入 -1,我会写: def prepare_for_connection(*args, **kwargs): if (self.handle is not None): return -1 if not (isinstance(port_number, int) or isinstance(port_number, float)): return -1 if port_number < 0: return -1 # function body
  • 【Python 1-12】Python手把手教程之——用户输入input函数
    作者 | 弗拉德来源 | 弗拉德(公众号:fulade_me) 函数input() 函数input()让程序暂停运行,等待用户输入一些文本。获取用户输入后,Python将其存储在一个变量中,以方便你使用。例如,下面的程序让用户输入一些文本,再将这些文本呈现给用户: message = input("Tell me something, and I will repeat it back to you: ") print(message) 函数input()接受一个参数:即要向用户显示的提示或说明,让用户知道该如何做。在这个示例中,用户将看到提示Tell me something, and I will repeat it back to you:。程序等待用户输入,并在用户按回车键后继续运行。输入存储在变量message中,接下来的print(message)将输入呈现给用户: Tell me something, and I will repeat it back to you: This is Fulade! This is Fulade! 每当你使用函数input()时,都应指定清晰而易于明白的提示,准确地指出你希望用户提供什么样的信息——指出用户该输入任何信息的提示都行,如下所示: name = input("Please enter your name: ") print
  • 在不满足条件的情况下打印错误消息而不打印回溯并关闭程序(Print an error message without printing a traceback and close the program when a condition is not met)
    问题 我已经看到了与此类似的问题,但它们都没有真正解决引用问题。 如果我有这样的课程 class Stop_if_no_then(): def __init__(self, value one, operator, value_two, then, line_or_label, line_number): self._firstvalue = value_one self._secondvalue = value_two self._operator = operator self._gohere = line_or_label self._then = then self._line_number = line_number def execute(self, OtherClass): "code comparing the first two values and making changes etc" 我希望我的execute方法能够执行的操作是,如果self._then不等于字符串“ THEN”(在allcaps中),那么我希望它引发自定义错误消息并终止整个程序,同时也不显示回溯。 如果遇到错误,则应该打印出的唯一内容看起来像是这样(我以3为例,格式化不是问题)。 `Syntax Error (Line 3): No -THEN- present in the
  • 在mips中读取和打印整数(Reading and printing an integer in mips)
    问题 我的程序假设读取一个整数并将其打印回用户,但是无论输入什么内容,每次每次它都会打印268501230。 任何帮助,将不胜感激。 .data prompt2: .asciiz "Please enter value: " array1: .space 40 array2: .space 40 buffer: .space 4 .text main: #Prints the prompt2 string li $v0, 4 la $a0, prompt2 syscall #reads one integer from user and saves in t0 li $v0, 5 la $t0, buffer syscall li $v0, 1 li $t0, 5 # $integer to print syscall exitProgram: li $v0, 10 # system call to syscall # terminate program 回答1 这就是我将如何编写程序以获取整数输入并将其打印出来的方式 .data text: .asciiz "Enter a number: " .text main: # Printing out the text li $v0, 4 la $a0, text syscall # Getting user input li $v0
  • 打印整数时, printf 语句在这里如何工作?(How does printf statement work here, when printing integer number?)
    问题 #include<stdio.h> int main() { int a=034; printf("%d",a); return 0; } 如果我给一个值 034,输出是 28。如果它是 028,它会给出一个错误,说“八进制常量中的数字“8”无效”。 回答1 在C如果您以零 ( 0 ) 开头的整数,则将其视为该数字的八进制表示。 在八进制表示中,只有 8 个有效数字。 它们是 0、1、2、3、4、5、6 和 7。 所以你可以看到printf在这里正常工作。 034是octal数,十进制是28 。 所以printf正在打印 int 变量a正确值,它是八进制的34 ,相当于十进制的28 。 但是,错误 - 使用038 - 与printf无关。 当您尝试使用像038这样的数字时会出错,因为您使用的是八进制表示 - 通过以0开头的数字 - 但您使用的是无效数字8 ,它在octal数字系统中根本不存在。 PS:如果数字以0x或0X 0x ,则将其视为数字的十六进制表示。 PS:如果要以八进制格式打印整数,格式说明符是%o 。 例如: printf("num = %o \n", num); PS:如果要以十六进制格式打印整数,格式说明符是%x或%X 。 例如: printf("num1 = %x, num2 = %X \n", num1, num2); 回答2 整数可以用十进制
  • python从入门到实践第七章课后练习
    python从入门到实践第七章课后练习 7-1 汽车租赁 编写一个程序,询问用户要租赁什么样的汽车,并打印一条消息,如“Let me see if I can find you a Subaru”。 price = input('Please input the car what you want: ') print('\nLet me see if I can find you a ' + price) 运行结果 Please input the car what you want: Snbaru Let me see if I can find you a Snbaru 7-2 餐馆订位 编写一个程序,询问用户有多少人用餐。如果超过 8 人,就打印一条消息,指出没有空桌;否则指出有空桌。 number = int(input('Please input how many people :')) if number > 8: print('\nsorry,There is no table in free') else: print('\nOK,I\'m waitingfor you') 运行结果 Please input how many people :5 OK,I'm waiting for you Please input how many people :10
  • Python:将字符串转换为整数(Python: Convert a string to an integer)
    问题 是否有人能将不安全的字符串转换为int ? 该字符串通常以以下形式返回: '234\r\n'或类似的东西。 在这种情况下,我需要234 。 如果为'-1\r\n' ,我想要-1 。 我从不希望该方法失败,但我不想尝试,除非通过,也只是为了隐藏错误(以防万一发生极端情况)。 回答1 在这种情况下,您确实有一种避免try / except ,尽管我不建议这样做(假设您的输入字符串名为s ,并且您处在必须返回某些内容的函数中): xs = s.strip() if xs[0:1] in '+-': xs = xs[1:] if xs.isdigit(): return int(s) else: ... else的...部分是您返回所需else的地方,例如s是'iamnotanumber' , '23skidoo' ,空,全空格等。 除非很多输入字符串都是非数字的,否则try / except更好: try: return int(s) except ValueError: ... 您会看到简洁明了,并且避免了笨拙的字符串操作和测试!-) 我看到很多答案都做int(s.strip()) ,但是这很麻烦:不需要剥离! >>> int(' 23 ') 23 int知道足够多地独自忽略前导和尾随空格!-) 回答2 import re int(re.sub(r'[^\d-]+', ''
  • Java打印包含多个整数的字符串(Java printing a string containing multiple integers)
    问题 今天才开始学习Java,似乎无法弄清楚。 我正在学习Learnjavaonline.org上的教程,该教程教您一些知识,然后要求您编写代码来完成特定的事情,然后检查输出以查看其正确性。 问题是,如果它不正确,则不会说出原因,也不会为您提供正确代码的示例。 它希望我使用所有原语输出一个字符串,说“ H3110 w0r1d 2.0 true” 我想出了这个 public class Main { public static void main(String[] args) { char h = 'H'; byte three = 3; short one = 1; boolean t = true; double ten = 10; float two = (float) 2.0; long won = 1; int zero = 0; String output = h + three + one + ten + " " + "w" + zero + "r" + won + "d " + two + " " + t; System.out.println(output); } } 但它输出86.0 w0r1d 2.0 true 我怎样才能使它不将所有整数相加,而是连续显示? 回答1 您可以使用包装器类的toString或valueOf方法将数字转换为字符串(猜测您还不存在)
  • 在 Google Apps 脚本中打印到控制台?(Printing to the console in Google Apps Script?)
    问题 我对编程非常陌生(已经参加了 Codecademy 上的一些 JS 课程)。 我正在尝试创建一个简单的脚本来确定,如果给定一个包含扑克游戏结果的电子表格,谁应该付钱给谁。 我打开了 Google Apps Script,并编写了以下内容以开始使用: function addplayerstoArray(numplayers) { var playerArray = []; for (i=0; i<numplayers; i++) { playerArray.push(i); } } addplayerstoArray(7); console.log(playerArray[3]) 这个想法是创建一个包含玩家总数的数组。 运行代码时,我认为它会在控制台上打印“3”。 但什么也没发生。 它说 “参考错误:未定义“控制台”。” A) 我不明白 Google Apps 脚本控制台如何在打印方面工作,以便我可以查看我的代码是否完成了我想要的工作? B) 代码有问题吗? 回答1 控制台不可用,因为代码在云中运行,而不是在您的浏览器中。 相反,使用 GAS 提供的 Logger 类: Logger.log(playerArray[3]) 然后在 IDE 中的 View > Logs... 下查看结果 这是有关使用 GAS 进行日志记录的一些文档。 编辑:2017-07-20 Apps
  • python中的交互式输入(Interactive input in python)
    问题 以下是我需要做的事情的说明: 您将编写一个完整的程序,该程序获取三个数据,然后对其进行处理。 这三条信息是布尔值、字符串和整数。 程序的逻辑是这样的:如果布尔值为True,则打印两次字符串,一次带双引号,一次不带 - 否则打印两次数字。 这是我到目前为止所拥有的: def main(): Boolean = input("Give me a Boolean: ") String = input("Give me a string: ") Number = int(input("Give me a number: ")) 有人可以帮我吗? 回答1 在stackoverflow上,我们是来帮助人们解决问题的,而不是做你的功课,因为你的问题很可能听起来……也就是说,这就是你想要的: def main(): Boolean = input("Give me a Boolean: ") String = input("Give me a string: ") Number = int(input("Give me a number: ")) if Boolean == "True": print('"{s}"\n{s}'.format(s=String)) try: print('{}\n{}'.format(int(Number))) except ValueError as err
  • 如何在Python中将用户输入限制为仅整数(How can I limit the user input to only integers in Python)
    问题 我正在尝试进行多项选择调查,以允许用户从选项1-x中进行选择。 如何做到这一点,以便如果用户输入数字以外的任何字符,则返回类似“那是无效答案”的内容 def Survey(): print('1) Blue') print('2) Red') print('3) Yellow') question = int(input('Out of these options\(1,2,3), which is your favourite?')) if question == 1: print('Nice!') elif question == 2: print('Cool') elif question == 3: print('Awesome!') else: print('That\'s not an option!') 回答1 您的代码将变为: def Survey(): print('1) Blue') print('2) Red') print('3) Yellow') while True: try: question = int(input('Out of these options\(1,2,3), which is your favourite?')) break except: print("That's not a valid option!") if
  • 使用整数作为输入的错误处理(Error handling using integers as input)
    问题 香港专业教育学院建立了这个程序,检查分数为100进行测试。 如果用户输入的数字少于60,则如果输入的数字大于59,则表示失败,则通过。 mark = int(input("Please enter the exam mark out of 100 ")) if mark < 60: print("\nFail") elif mark < 101: print("\nPass") else: print("\nThe mark is out of range") 如果用户未输入Integer,我如何使程序没有错误。 请帮助,有一个14岁的孩子会理解的快速解决方案吗? 回答1 将输入保存在变量中并分别转换为整数: import sys i = input("Please enter the exam mark out of 100 ") try: mark = int(i) except ValueError: print('\nYou did not enter a valid integer') sys.exit(0) if mark < 60: print("\nFail") elif mark < 101: print("\nPass") else: print("\nThe mark is out of range") 如果失败(即得到ValueError )
  • 当我输入一个字母时,cin输入(input是一个int),而不是一次打印不正确,而是一次打印正确,然后在循环的其余部分使用inc(cin input (input is an int) when I input a letter, instead of printing back incorrect once, it prints correct once then inc for the rest of the loop)
    问题 我正在制作一个乘法练习程序。 就像我的标题所说的那样,如果我在控制台中输入字母而不是数字,它将在第一个字母上说正确,而在其余字母上说不正确。 即使您没有触摸键盘,它仍然会吐出不正确的声音。 ans = table * i; std::cout << table << " * " << i << " =" << std::endl; std::cin >> input; if(input == ans) { std::cout << "Correct! " << ans << std::endl; } else { std::cout << "Incorrect, the answer was " << ans << std::endl; input = 0; ans = 0; } } 希望可以让您对代码中发生的事情有一个了解。 这是输出。 Enter the table you'd like to learn. 5 Enter the amount of multiples 3 5 * 0 = s Correct! 0 5 * 1 = Incorrect, the answer was 5 5 * 2 = Incorrect, the answer was 10 5 * 3 = Incorrect, the answer was 15 我该怎么做才能解决此问题? 感谢您的输入