为什么我使用`exec()`的代码抛出错误?

时间:2019-09-02 20:27:19

标签: python python-3.x

我正在做的事情是询问您要做什么然后再做。但是当我调用另一个文件时,它不会读取整个文件。

这是调用另一个脚本的代码

if math == "yes":
    exec(open("calculator.py").read());'''

这是被称为的脚本

'''
     else:
        print('You have not typed a valid 
operator, please run the program again.')
# Add again() function to calculate() function
    again()

def again():
    calc_again = input('''
Do you want to calculate again?
Please type Y for YES or N for NO.
''')

    if calc_again.upper() == 'Y':
        calculate()
    elif calc_again.upper() == 'N':
        print('See you later.')
    else:
        again()

calculate()

这是错误

    Traceback (most recent call last):
  File "C:\Users\cahen\Desktop\chat bot.py", line 
17, in <module>
    main()
  File "C:\Users\cahen\Desktop\chat bot.py", line 
14, in main
    exec(open("calculator.py").read());
  File "<string>", line 47, in <module>
  File "<string>", line 32, in calculate
NameError: name 'again' is not defined

如果我自己运行Calculator.py,它就可以正常工作。只是当我从另一个混乱的脚本中调用它时。

1 个答案:

答案 0 :(得分:0)

很明显,您尝试在定义之前调用again函数:

 '''
     else:
        print('You have not typed a valid 
operator, please run the program again.')
# Add again() function to calculate() function
    again()   # <----------------- CALLED HERE

def again():  # <----------------- DEFINED HERE
    calc_again = input('''
Do you want to calculate again?
Please type Y for YES or N for NO.
''')

    if calc_again.upper() == 'Y':
        calculate()
    elif calc_again.upper() == 'N':
        print('See you later.')
    else:
        again()

calculate()