J'essaie d'exécuter un module à partir de la console. La structure de mon répertoire est la suivante:
J'essaie d'exécuter le module p_03_using_bisection_search.py
, à partir du problem_set_02
répertoire en utilisant:
$ python3 p_03_using_bisection_search.py
Le code à l'intérieur p_03_using_bisection_search.py
est:
__author__ = 'm'
from .p_02_paying_debt_off_in_a_year import compute_balance_after
def compute_bounds(balance: float,
annual_interest_rate: float) -> (float, float):
# there is code here, but I have omitted it to save space
pass
def compute_lowest_payment(balance: float,
annual_interest_rate: float) -> float:
# there is code here, but I have omitted it to save space
pass
def main():
balance = eval(input('Enter the initial balance: '))
annual_interest_rate = eval(input('Enter the annual interest rate: '))
lowest_payment = compute_lowest_payment(balance, annual_interest_rate)
print('Lowest Payment: ' + str(lowest_payment))
if __name__ == '__main__':
main()
J'importe une fonction dans p_02_paying_debt_off_in_a_year.py
laquelle le code est:
__author__ = 'm'
def compute_balance(balance: float,
fixed_payment: float,
annual_interest_rate: float) -> float:
# this is code that has been omitted
pass
def compute_balance_after(balance: float,
fixed_payment: float,
annual_interest_rate: float,
months: int=12) -> float:
# Omitted code
pass
def compute_fixed_monthly_payment(balance: float,
annual_interest_rate: float) -> float:
# omitted code
pass
def main():
balance = eval(input('Enter the initial balance: '))
annual_interest_rate = eval(
input('Enter the annual interest rate as a decimal: '))
lowest_payment = compute_fixed_monthly_payment(balance,
annual_interest_rate)
print('Lowest Payment: ' + str(lowest_payment))
if __name__ == '__main__':
main()
Je reçois l'erreur suivante:
ModuleNotFoundError: No module named '__main__.p_02_paying_debt_off_in_a_year'; '__main__' is not a package
Je ne sais pas comment résoudre ce problème. J'ai essayé d'ajouter un __init__.py
fichier, mais cela ne fonctionne toujours pas.
eval(input(...
bit a été suggéré par 2to3. Je l'ai fait me faire ça aujourd'hui. heureux de ne pas suivre ses suggestions aveuglantes
eval(input...
n'est probablement pas une excellente idée. Je voudrais simplement l'analyser au lieu d'ouvrir la possibilité d'une exécution de code arbitraire.