変数を動的に作成しようとしているようです。コードは次のようになると思います。
def htmlfrom(website_url):
import urllib.request
response = urllib.request.urlopen(website_url)
variable_for_raw_data =(input("What will this data be saved as: "))
global variable_for_raw_data
variable_for_raw_data = response.read()
if __name__ == "__main__":
htmlfrom("www.stackoverflow.com")
#html_stackoverflow is never created it is the value
#of variable_for_raw_data before variable_for_raw_data
#is overridden by response.read()
#entering information into input doesn't create a variable
print(html_stackoverflow)
これが私がそれを行う方法です:
import urllib.request
def htmlfrom(website_url):
'''
docstrings
'''
response = urllib.request.urlopen(website_url)
variable_for_raw_data = response.read()
return variable_for_raw_data
if __name__ == "__main__":
file_name = input("What will this data be saved as: ")
html_from_website = htmlfrom("www.stackoverflow.com")
with open(file_name, 'w') as f:
f.write(html_from_website)
説明
関数内に import ステートメントがある場合、関数内でのみアクセスできます (つまり、他の関数はアクセスできません)。
import urllib.request
PEP 8には、python で物事を命名する方法に関するガイドラインがあります。キャメルケースは通常、クラス名用に予約されています。
def htmlfrom(website_url):
'''
docstring
'''
通常、 Docstringは良い考えです。
グローバルの適切な使用に関する詳細については、この質問を確認してください。あなたの状況について私が知っていることに基づいて、それらを使用する必要はないと思います。
response = urllib.request.urlopen(website_url)
variable_for_raw_data = response.read()
return variable_for_raw_data
`if name == ' main ':について知らない場合は、よく読んでください。
if __name__ == "__main__":
意味のある変数名を使用し、ビルトインをオーバーライドしないことを忘れないでください
(つまり、file = "foo.txt" はビルトイン ファイルをオーバーライドします)。
file_name = input("What will this data be saved as: ")
html_from_website = htmlfrom("www.stackoverflow.com")
コンテキスト マネージャーの詳細については、こちらをご覧ください。
with open(file_name, 'w') as f:
f.write(html_from_website)
FOR WHICH NO USE CASE EXISTS AT ALLglobals()
を使用した編集。
def htmlfrom(website_url):
import urllib.request
response = urllib.request.urlopen(website_url)
variable_for_raw_data =(input("What will this data be saved as: "))
globals()[variable_for_raw_data] = response.read()