首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不同实例中以不同方式运行的函数-python

在不同实例中以不同方式运行的函数-python
EN

Stack Overflow用户
提问于 2015-03-15 17:03:42
回答 1查看 30关注 0票数 0

我已经写了这个程序,它获取一个叫做十四行诗的文件,首先,将十四行诗中的所有罗马数字改为数字,复制到一个新文件中,然后要求用户输入数字,并向他们显示与他们的数字相对应的十四行诗(如果在1和7之间)。

对于1和7以外的数字,我会显示适当的错误消息,给出他们输入的内容和需要再次输入的内容的具体说明。

我单独编写了所有的函数,当我将它们放在一起时,所有的函数都会运行,除了函数serve_poem()中的" EXCEPT“部分。当我单独运行函数时,它给了我正确的错误消息,但是,现在它只给我自动错误消息,而不是我编码的特定消息。

我在下面发布了我的整个代码,因为我认为其他函数中的某个函数正在扰乱它(?)因为它自己运行得很好。

代码语言:javascript
复制
def change_romans_to_numbers(s):
    if   s == "I.":     
        return("1.")
    elif s == "II.":    
       return("2.")
    elif s == "III.":   
        return("3.")
    elif s == "IV.":   
        return("4.")
    elif s == "V.":    
        return("5.")
    elif s == "VI.":    
        return("6.")
    elif s == "VII.":   
        return("7.")
    else:               
        return s

def serve_poem():
    sonnet=open(r"C:\Users\Emily\Documents\sonnets.txt", "r")
    x=int(input("Please enter a number 1-7:"))
    s=sonnet.readlines()
    s=list(s)
    try:
        if x==1:
            up=int(2+14*(x-1))
            lower=int(2+14*(x-1)+14)
            for i in range (up,lower):
                print(s[i])
        if 2<=x<=7:
            up=int((2+14*(1-1))+(19*(x-1)))
            lower=int((2+14*(1-1)+14)+(19*(x-1)))
            for i in range (up,lower):
                print(s[i])
        if x<0:
            print("You entered a negative number. Please enter a number between 1 and 7:")
            serve_poem()
        if x==0:
            print("You entered 0. Please enter a number between 1 and 7:")
            serve_poem()
        if x>7:
            print("You entered a number greater than 7. Please enter a number between 1 and 7:")
            serve_poem()
    except ValueError:
        print("Error: Value Error. You did not enter a number at all! Please re-enter a number:")
        serve_poem()

def writing_romans_to_numbers():        
    sonnet=open(r"C:\Users\Emily\Documents\sonnets.txt", "r")
    sonnet_fixed=open(r"C:\Users\Emily\Documents\sonnets-fixed.txt", "w")
    for line in sonnet:
        new=change_romans_to_numbers(line.strip())
        sonnet_fixed.write(new + '\n')

def main():
    writing_romans_to_numbers()
    serve_poem()

main()

以下是我的错误消息(如果用户输入q):

代码语言:javascript
复制
File "C:/Users/Emily/.spyder2-py3/temp.py", line 28, in serve_poem
x=int(input("Please enter a number 1-7:"))

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

回答 1

Stack Overflow用户

发布于 2015-03-15 17:11:48

您的问题是您没有在try...except块中包装这一行:

代码语言:javascript
复制
    x=int(input("Please enter a number 1-7:"))

如果给定非数值型输入,此行将引发异常,但try...except块不会处理此异常。您只需要将这一行放入try...except块中,如果该行通过,将确保它是数值输入,因此您的比较应该有效。

然而,正如Martjin所说,这不是最好的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29058960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档